Strcpy und strncpy fehlerhaft! (VC++6.0)

Hallo!

Um einen CString in einen Buffer (char*) zu kopieren, benutze ich die Funktion „strcpy“. Leider führt diese Funktion öfters zu Abstürze. Und bei der Funktion „strncpy“ werde Hyroglyphen mit hinein kopiert!

Hier zur Analyse die beiden Funktionen:

CString strText = „Das ist ein Test!“;
char * pBuffer;
int iLen = strText.GetLength();
pBuffer = (char*)malloc(iLen);
strcpy(pBuffer, strText);
//—> stürzt ab!!!

CString strText = „Das ist ein Test!“;
char * pBuffer;
int iLen = strText.GetLength();
pBuffer = (char*)malloc(iLen);
strncpy(pBuffer, strText.GetBuffer(0), iLen);
//Variation: strncpy(pBuffer, strText.GetBuffer(iLen), iLen);

//—> Ausgabe von Hyroglyphen

Kennt jemand eine Lösung oder eine Alternative?
Bin für jeden Hinweis dankbar!

Ciao
Catmad

Hi Catmad!

Warum verwendest Du statt dem CString nicht einfach nur
char ?

char MyVar[] = „Text“;

ist zwar nur C und nich c++ funzt aba bessa !

Ciao
Mario

int iLen = strText.GetLength();
pBuffer = (char*)malloc(iLen);
strcpy(pBuffer, strText);

AFAIK gibt GetLenght() die Anzahl der Zeichen _ohne_ terminierenden Null-Character zurück, strcpy kopiert aber inklusive, d. h. du hast ein Byte zu wenig Speicher allokiert.

Probier mal:
pBuffer = (char*)malloc( iLen + 1 );

Grüße, Robert

strcpy und strncpy kopieren einen Speicherbereich von der Startadresse bis ein 0 Zeichen oder n Byte erreich sind.

CString ist ein Objekt. Du Kopierst den Anfang des Objektes in den anderen Speicherbereich hinein - und nicht den Text den Du eigentlich haben willst.

Schau ob das Objekt eine Methode c_str() o.ä. hat was Dir einen passenden String liefert. Wenn dies nicht geht schau ob CString einen Operator [] kennt und kopiere in einer Schleife oder mit einem Iterator um.

Viele Grüße

Michael

CString ist ein Objekt. Du Kopierst den Anfang des Objektes in
den anderen Speicherbereich hinein - und nicht den Text den Du
eigentlich haben willst.

CString hat einen LPCTSTR Operator definiert der einen Pointer auf den Inhalt des CStrings zurückgibt, ich glaube der müßte auch auf char* greifen.

Falls nicht, die Methode heißt GetBuffer().

Grüße, Robert