[VC++] LPCTSTR kopieren

S

Spacy

Gast
Hallo.
Ich steige da im Moment nicht ganz durch, ich hab folgendes Problem:

Ich habe 2 Pointer auf einen LPCTSTR String:

LPCTSTR *exts
und
LPCTSTR *extensions

Ich will nun einfach die simple Aufagbe durchführen, den Inhalt von exts zu extensions zu kopieren.

Wie geht das?
 
Hmm, eigentlich müsste es so gehen:
Code:
*extensions=*exts;
Durch die Sternchen wird der Pointer dereferenziert, also sprichst du praktisch nicht die Adresse selbst an, sondern das, was da eben steht ;)
Gruß, Martin
 
WIrd dadurch nicht nur das erste Byte kopiert, oder der ganze String bis zur 0?
 
Hmm, da könntest du Recht haben. Ich kenne diesen Datentyp leider nicht genau. Aber ansonsten könntest du das Problem einfach mit einer Schleife lösen, die von 0 bis strlen(extensions) zählt, und dann jedes zeichen nacheinander kopiert.
Gruß, Martin
 
Hallo,

ein LPCTSTR ist nichts anders als ein normales char*. D.h. der Kopiervorgang wird entweder mit strcpy, oder memcopy oder in einer selber programmierten Schleife vorgenommen. Man könnte natürlich auch in C++ ein string Objekt nehmen und das dafür nutzen.

Letztendlich ist aber wichtig, das für den Zielpointer auch Speicher reserviert wurde, sonst gibt es ganz simpel einen Absturz.

Code:
LPCTSTR exts = new CHAR[11];
LPCTSTR extensions = "Hallo Welt";

strcpy( (char*) exts, (char*) extensions);

Aber Vorsicht, ein LPCTSTR* entspricht einem char**. Unschön sind die cast operatoren im strcpy. Daher würde es sich eher anbieten prinzipiel einfach nur char* zu verwenden, dann muss nicht gecastet werden.

Das strcpy funktioniert natürlich nur wenn nicht mit Unicode gearbeitet wird.

MfG

Arnd
 
Zuletzt bearbeitet:
Arnd schrieb:
Hallo,

ein LPCTSTR ist nichts anders als ein normales char*.

Ist LPCTSTR nicht ein const char* ? Falls dem so ist dürfte es keine so gute Idee sein einfach in einen char* zu casten, oder?
 
Ich habe wie gesagt darauf hingewiesen das der cast keine gute Lösung ist.
Das C weisst sicher stark auf ein const hin.

Auszug aus dem Headerfile:

typedef const TCHAR FAR * LPCTSTR;

D.h. korrekterweise sollte der Zielpointer also vom Typ LPTSTR sein, oder noch besser eben gleich einfach ein char*.

MfG

Arnd
 
Zurück
Oben