fputs() schreibt nur ein Zeichen



  • Hallöchen,

    was C++ angeht bin ich noch recht grün hinter den Ohren
    ich habe folgenden Code geschrieben der einfach den inhalt einer textdatei in eine andere schreiben soll WriteString kann ich nicht benutzen da das ganze mit "Embedded VC" programmiert wird, das Problem ist das fputs() von jeder Zeile nur jeweils das erste Zeichen in die neue Datei schreibt. (nicht wundern sZeile brauche ich später da beim einlesen bestimmte Zeichen an manchen Stellen hinzugefügt werden solllen)

    {
    	CString sZeile;
    	char *cValue;
    	LPTSTR lValue;
            FILE *stream;
    	FILE *streamW;
    	char list[102];
    
    	char* Datei = (char*) "quelle.txt"; 
    	char* DateiW = (char*) "ziel.txt";
    
    	streamW = fopen(DateiW,"w");
    	if(( stream = fopen(Datei,"r+t"))!= NULL)
    	{
    		while(fgets(list, 100, stream))
    		{
    			list[strlen(list)]='\0';
    			sZeile=CString(list);
    
    			sZeile+="\n";
    			lValue=sZeile.GetBuffer(sZeile.GetLength());
    			cValue=(char*)lValue;
    			fputs(cValue,streamW);
    			sZeile.ReleaseBuffer();
    		}
    		fclose(stream);
    		fclose(streamW);
    	}	
    }
    

    bin echt an meiner blödheit am verzweifeln 😞



  • Hallo ThomasTl !

    Ich hab es mit VC++ 6 ausprobiert und festgestellt, das es bis auf ein paar Kleinigkeiten sehr gut funktioniert. Sorry wenn ich Dir diesbezüglich nicht weiterhelfen kann.

    Gruß Ernst



  • ich habe die Vermutung das das Problem in dieser Zeile auftritt,

    cValue=(char*)lValue;
    

    gibt es alternative Möglichkeiten, einen Cstring in eine txt Datei zu bekommen? Wie gesagt WriteString kann ich nicht nehmen und fwrite liefert bei mir ein komisches file in dem der eigentliche Text dann eher so ausssieht "T E X T"

    Bin echt verzweifelt 😞


  • Mod

    Ich gehe mal davon aus, dass Du ein UNICODE Programm vor Dir hast.
    Dein CString enthälz also einen UNICODE und der hat aus MBCS Sicht nun mal alle 2 Zeichen meistens ein Null-Zeichen.

    Dieser cast

    cValue=(char*)lValue;
    

    der absolut überflüssig wäre kaschiert diesen Fehler.

    Andere Frage: Warum schiebst Du den char String denn in den CString rein?



  • Wie gesagt bin noch blutiger Anfänger deshalb hatte ich den

    cValue=(char*)lValue;
    

    eingebaut um die Programmabfolge einfach besser zu verstehen und nachvollziehen zu können.

    Andere Frage: Warum schiebst Du den char String denn in den CString rein?

    Die funktion die ich bauen will bekommt einen CString, das Programm liest die Datei zeilenweise ein. Findet die Funktion keine Übereinstimmung mit der Zeile mit dem CString wird die Zeile in die neue Datei geschrieben, ist der CString mit der Zeile identisch wird die Zeile umgeändert und dann auch geschrieben.

    Damit die schreibgeschichte ersteinmal läuft habe ich die Routine erstmal nur so geschrieben das sie einliest in CString wandelt dann CString (brauche ich ja dann damit ich CString mit CString vergleichen kann) dann den CString in eine Datei schreibt.
    Ich vermute das das Problem beim (char*)lValue; leigt, ein MessageBox(lValue) gibt mir noch den ganzen String aus, im cValue kommt scheinbar nur ein zeichen an?!


Anmelden zum Antworten