fprintf und CString



  • Hallo Forum,

    Ich würde gerne einen CString (Dieser kommt ursprünglich von einem Edit-Feld)
    in eine Datei schreiben.

    Eigenartigerweise wird aber immer nur der 1. Buchstabe geschrieben. Woran könnte das liegen das?

    Vereinfacht sieht mein Code dazu in etwa so aus:

    FILE *ffile=NULL;
    	CString test;
    
    	ffile = fopen("data.dat","w+");
    	if(ffile !=NULL)
    	{
    	   CString test = _T("blaa");
    	    fprintf(ffile,"%s",test);
    	}
    	fclose(ffile);
    

    "test" ist auch wirklich nur zum test. In der richtigen Anwendung wird da ein String aus einem Objekt reingeschrieben.

    Bei beiden Speichert er leider nur den 1. Buchstaben 😞 .

    Vielen Dank und liebe Grüße

    thps



  • fprintf erwartet bei "%s" einen Zeiger ein ein char-Array! Du übergibst aber ein "CString" *Objekt*!

    Übergebe einen Zeiger auf das Char-Array, dann geht es... z.B. so:

    fprintf(ffile,"%s", (LPCSTR) test);
    

    Beachte auch, dass Du hier "normal" char-Funktionen verwendest, vermutlich aber mit UNICODE übersetzt, was dann aus dem CString ein CStringW macht (also wchar_t)!



  • Dein Programm verwendet Unicode (ab XP: UTF-16LE). _T("blaa") wird also zu 62 00 6C 00 61 00 61 00 00 00 und da fprintf byteweise arbeitet und an zweiter Stelle gleich NUL kommt, wird nur 62 (b in ASCII) ausgegeben. Verwende lieber _ftprintf oder _fputts. Oder besser noch CFile!



  • Vielen Dank für eure Hilfe, ich verwende jetzt _fputts. Gibt es auch ein pendant dazu zum lesen der Daten ? Lg



  • Ja wie EinGast schon geschrieben hat "Oder besser noch CFile!", denn das ist die MFC-Klasse zum lesen und schreiben von Dateien. Was noch geht ist CStdioFile ist auch eine Klasse die von CFile erbt.



  • aaaahh OK danke bis zu CFile bin ich nicht gekommen 🙂


Anmelden zum Antworten