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