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.htmlbis 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