Konvertierung von 'AnsiString' nach 'char' nicht möglich



  • Die Fehlermeldung ist mir klar, aber ich hab keine Idee wie ich das lösen kann.
    Bin für jeden Tip dankbar!

    [C++ Fehler] Unit1.cpp(55): E2034 Konvertierung von 'AnsiString' nach 'char' nicht möglich

    int i = Memo1->Lines->Text.Length();
     char* inhalt = new char[i+1];
     for (int z=0; z<=i; z++)
     {
      inhalt[z] = Edit1->Text;
     }
    


  • Hallo

    das ist ja ziemlich verkorkst. Was willst du eigentlich machen? Brauchst du den veralteten und fehleranfälligen C-String eigentlich, und kannst du nicht statt dessen gleich AnsiString benutzen?
    Bedenke, das du mit AnsiString::c_str() jederzeit aus einem AnsiString einen konstanten C-String-Pointer auf den Inhalt des AnsiString bekommst. Das reicht vollkommen aus, ohne wirklich mit C-Strings zu arbeiten.

    Schau dir am besten nochmal genau an, was man mit AnsiString machen kann
    http://bcb-tutorial.c-plusplus.net/Ansi/artikel2.html

    bis bald
    akari



  • akari schrieb:

    Bedenke, das du mit AnsiString::c_str() jederzeit aus einem AnsiString einen konstanten C-String-Pointer auf den Inhalt des AnsiString bekommst.

    Der Pointer gibt dir nur in dem Moment, in dem du den Wert aufrufst, den richtigen Wert (bzw. die richtige Adresse) zurück! Wenn du ihn speicherst und später wieder darauf zugreifst, kann der Wert ein gant anderer (unbrauchbarer) sein!



  • ich versteh auch nicht ganz, was der code bezwecken soll, aber wenn es nur darum geht einen AnsiString in char umzuwandeln, würde ich AnsiString.c_str() verwenden.

    ansonsten wäre dein quelltext eher so korrekt:

    int i = Memo1->Lines->Text.Length();
    char* inhalt = new char[i+1];
    for (int z = 0; z < i; z++)
    {
      inhalt[z] = Edit1->Text[z];
    }
    


  • Hallo

    @ mr_beer : korrekt schon, aber dann kann man gleich strncpy() nehmen. Und dafür setzt man auch wieder AnsiString::c_str() ein.

    bis bald
    akari



  • und außerdem beginnen AnsiStrings nicht bei 0, sondern bei 1...

    Grüße Joe_M.



  • Reyx schrieb:

    akari schrieb:

    Bedenke, das du mit AnsiString::c_str() jederzeit aus einem AnsiString einen konstanten C-String-Pointer auf den Inhalt des AnsiString bekommst.

    Der Pointer gibt dir nur in dem Moment, in dem du den Wert aufrufst, den richtigen Wert (bzw. die richtige Adresse) zurück! Wenn du ihn speicherst und später wieder darauf zugreifst, kann der Wert ein gant anderer (unbrauchbarer) sein!

    noch ein Grund um sMyAnsiString.c_str() zu verwenden. Man muss das halt immer
    verwenden und nicht in irgend einem Pointer speichern...



  • Hallo,

    ich würde es so machen

    char *inhalt = new char[Memo1->Lines->Text.Length() + 1];
    strcpy(inhalt, Memo1->Lines->Text.c_str());
    //
    delete [] inhalt;
    

    Gruß Siegfried

    🙂


Log in to reply