Strings



  • Kann man irgendwie sagen, welchen Stringtyp man am besten verwenden sollte? AnsiString, oder CString, oder char*?

    Ich hatte angenommen, dass AnsiString das beste sei, das man in bcb ja überall AnsiStrings übergeben muss, aber nun erhalte ich ständig Exceptions, wenn ich beispielsweise einen long int in einen AnsiString casten will!

    Merci pascal



  • Zeig mal die Zeile COde und die präzise Exception Meldung... btw: CString ist MFC.

    -junix



  • Es scheint irgendwo ein gröberes Problem zu geben, ich glaub das programm (bzw c++ noch) nicht richtig realisiert oder begiffen zu haben. Ich kann alles mögliche tun, aber wenn ich z.b die folgende zeile aufrufe, kommt eine Exception

    Series1->AddXY(1, 50 , "", clRed);

    Eigentlich wären hier nicht 1 und 50 die übergabewerte, aber um irgendwie herauszufinden, wo genau das Problem liegen könnte, habe ich das mal so gemacht, aber die Exception kommt nochimmer....

    Die Funktion:

    void __fastcall TFrmMain::BitBtn13Click(TObject *Sender)
    {
    current *I = new current[I_ReglerTimeRange+1];
    AnsiString strist;
    AnsiString strsoll;
    AnsiString strtime;
    
      if (I_ReglerTimeRange > I_ReglerArraySize)
      {
        ptrCOM->ShowErrOutMsg("Es sind nicht genügend Werte vorhanden, um den Verlangten Bereich darstellen zu können.");
      }
      else
      {
        //I = ptrMOM->Get_I_Values();
    
        unsigned int tempist;
        unsigned int tempsoll;
        unsigned long int temptime;
    
        ListBox1->Clear();
        Series1->Clear();
        Series2->Clear();
    
        for (int i = 1; i<2/*I_ReglerTimeRange*/; i++)
        {
          tempist = I[i].i_ist;
          tempsoll = I[i].i_soll;
          temptime = I[i].time_stamp;
    
          strtime = AnsiString(temptime);
          strist =  AnsiString(tempist);
          strsoll = AnsiString(tempsoll);
    
          //ListBox1->Items->Add(strtime + ": ist " + strist + " soll " + strsoll);
          Series1->AddXY(1, 50 , "", clRed);
          Series2->AddXY(1, 70 , "", clGreen);
        }
    
      } //if (I_ReglerTimeRange > I_ReglerArraySize)
    delete [] I;
    I = NULL;
    

    All diese Temporären Variablen sind nur zum Debbuging vorhanden...

    Exception ist:Zugriffsverletzung bei <Adr> beim schreiben von <Hex>

    thx Pascal



  • Hallo DonPasequallo,

    "AnsiString" ist keine Funktion oder Methode sondern eine eigene Klasse die Methoden und Funktionen enthält (siehe die Hilfe in BCB). Die richtigen Aurufe zur Umwandlung könnten wie nachstehend aussehen.

    strtime.sprintf("%d", temptime); 
          strist.sprintf("%d", tempist); 
          strsoll.sprintf("%d", tempsoll);
    

    Evi48



  • DonPasequallo schrieb:

    aber nun erhalte ich ständig Exceptions, wenn ich beispielsweise einen long int in einen AnsiString casten will!

    strtime = AnsiString(temptime);
    

    Versuch es mal damit hier:

    strtime = IntToStr(temptime); //damit klappt es
    

    xy



  • Merci, für all die Hilfe, ist auch auf alle Fälle alles brauchbar und weiterbildend, aber ich hab mitlerweile herausgefinden, dass mein Problem ganz wo anders auftritt...:)

    Aber Vielleicht weiss jemand, wie gross man ein Dynamisches Globales Array machen darf....? Dürfen da Indexwerte von bis zu 15000 auftreten?



  • wenn du genug speicher hast, klar



  • Hi,
    vielleicht solltest du dir aber mal die FAQ durchlesen und insbesondere, dass was da zu globalen Variablen steht!

    MfG

    Alexander Sulfrian


Anmelden zum Antworten