typkonvertierung
-
Hallo,
wie wandele ich einen LPCSTR (soll wohl const char* sein) in char* um, damit ich ihn mit strcpy() + strcat() benutzen kann? Oder gibt es da noch alternative Methoden?
-
const char* p = "......";
char neu[256];
strcpy(neu, p);
-
Oder man machts in C++ und nimmt std::string.
const char* a = bla; // std::string b = a; b += blub;
-
MrPlow schrieb:
wie wandele ich einen LPCSTR (soll wohl const char* sein) in char* um, damit ich ihn mit strcpy() + strcat() benutzen kann? Oder gibt es da noch alternative Methoden?
LPCSTR ist ein MFC-Datentyp und steht für sowas wie Long-Pointer-Const-String. Die interne Definition entspricht const char*.
Eine Variable dieses Typs kann daher in strcpy und strcat als Quelle eingesetzt werden. Beispiel:LPCSTR txt="Hello World"; char arr[100]; strcpy( arr, txt );Um es als Ziel einzusetzen, müßte man das const wegcasten
strcpy( const_cast< char* >( txt ), ... );.. aber das deutet immer darauf hin, dass irgendwo anders ein Fehler gemacht wurde. Wo kommt den der LPCSTR her?
Gruß
Werner
-
LPCSTR ist ein MFC-Datentyp
Nö. Diesen Typ-Alias findest du auch völlig unabhängig von der MFC in der WinAPI.
Um es als Ziel einzusetzen, müßte man das const wegcasten
Damit verbietet man dem Compiler den Mund, gewonnen hat man dadurch aber nichts. Man produziert vielmehr undefiniertes Verhalten, da Stringliterale schon seit ewigen Zeiten als "read-only" definiert sind.
Btw: Eure Beispiele sind in einer Zeit in der man alle zwei Minuten eine neue Buffer-Overrun-Horrormeldung auf heise.de ließt sehr fragwürdig.
Zumindest einen Hinweis auf die Problematik könnte man ja geben...
-
Werner Salomon schrieb:
LPCSTR ist ein MFC-Datentyp
Eher WinAPI.
Werner Salomon schrieb:
Um es als Ziel einzusetzen, müßte man das const wegcasten
Was aber uU zu undefiniertem Verhalten führen kann.
edit:
hehe, da war Hume wieder mal schneller
-
HumeSikkins schrieb:
Um es als Ziel einzusetzen, müßte man das const wegcasten
Damit verbietet man dem Compiler den Mund, gewonnen hat man dadurch aber nichts. Man produziert vielmehr undefiniertes Verhalten, da Stringliterale schon seit ewigen Zeiten als "read-only" definiert sind.
Btw: Eure Beispiele sind in einer Zeit in der man alle zwei Minuten eine neue Buffer-Overrun-Horrormeldung auf heise.de ließt sehr fragwürdig.
Zumindest einen Hinweis auf die Problematik könnte man ja geben...
Hallo Benjamin,
Du hast natürlich völlig recht. Wenn ich so mein Posting nochmal bis zum Ende (!) durchlese ..Werner schrieb:
Um es als Ziel einzusetzen, müßte man das const wegcasten
strcpy( const_cast< char* >( txt ), ... );.. aber das deutet immer darauf hin, dass irgendwo anders ein Fehler gemacht wurde.
.. dann meine ich genau darauf hingewiesen zu haben. Aber ich habe mich wohl zu wenig drastisch ausgedrückt.
Ansonsten möchte ich Dich im Bestreben nach sicherer Software unterstützen. Ich selbst benutze noch nicht mal 'strcpy' in meinem Code. Das ist viel zu umständlich und gefährlich.
Gruß
Werner