E2034 Konvertierung von 'wchar_t *' nach 'const char *' nicht möglich
-
Ich möchte in ein char den Inhalt eines TEdit ablegen.
char text[255]; strcpy(text,Edit1->Text.c_str());
Erhalte aber leider nur die Meldung
[BCC32 Fehler] E2034 Konvertierung von 'wchar_t *' nach 'const char *' nicht möglich
Projektoptionen _TCHAR entspricht = wchar_t ist eingestellt. In BCB5 hat die Zeile noch funktioniert. Nun mit C++Builder2009 und UnicodeString scheint es etwas verzwickter.
Kann mir jemand helfen?
-
Das scheint die Lösung zu sein
strcpy(text,AnsiString(Edit1->Text).c_str());
-
Daß dein Programm durch einen Buffer Overrun absturzgefährdet ist, ist dir klar?
-
Das Eingabefeld Edit1 hat kleinere MaxLength als 255. Sollte dementsprechend kein Overrun passieren.
-
Ich habe dazu auch mal eine Frage:
FILE *fopen(const char *filename, const char *mode); UnicoeString FileName = ... fopen(AnsiString(FileName).c_str(), mode);
ISt das die optimale Konvertierung oder sollte man es anders machen?
-
Hallo
Nein das ist keine optimale Konvertierung. Das funktioniert nur für Unicode-Zeichen, die in der aktuell vom Betriebssystem verwendeten Codepage für AnsiString verfügbar sind. Ein Dateinamen mit z.B. kyrilischen Zeichen würde auf einem normalem deutschem Betriebsystem zur Unbrauchbarkeit zerhackt werden, das fopen wird fehlschlagen.
Die optimale Lösung ist ausschließlich die wchar_t-variante von fopen zu benutzen, bzw. wenn nicht vorhanden dann auf die auf jedenfall vorhandene FileOpen(W) Funktion aus der WinAPI auszuweichen.bis bald
akari
-
Stimmt. Also so:
_wfopen(slFileToCompress.c_str(), L"rb");