fprintf() schreibt ungewollte "L" ins File



  • Hallo,

    wie ihr unten im Code sehen könnt möchte ich einzelne Char's vom COM-Port lesen und anschließend geordnet in eine Textdatei schreiben. Funktioniert auch alles Problem nur ist, dass ich dann in meiner Textdatei hinter jedem Char was mein COM-Port gesendet hat ein "L" finde. Siehe unten.

    void empfangeDaten(int port) 
    {
    	char daten;
    	char *datenPtr = &daten;
    
    	FILE *test;
    
    	test = fopen("test.txt","w");
    	do{
    		daten = ComRdByte(port);
    		if (daten != 'd') fprintf(test, datenPtr);
    		if (daten == 'C') fprintf(test, " ");
    		if (daten == 'V') fprintf(test, " ");
    		if (daten == 's') fprintf(test, "\n");
    	}while(daten != 'd');
    	fclose(test);
    }
    

    Hier ist das was mein COM-Port sendet:

    20s27C0s27C0s26C1s27C0s27C0s27C0sd
    

    Sollte dann so in der Textdatei aussehen:

    20s
    27C 0s
    27C 0s
    26C 1s
    27C 0s
    27C 0s
    27C 0s
    

    und hier der wahre Inhalt meiner Textdatei:

    2L0LsL
    2L7LCL 0LsL
    2L7LCL 0LsL
    2L6LCL 1LsL
    2L7LCL 0LsL
    2L7LCL 0LsL
    2L7LCL 0LsL
    

    Nun natürlich meine Frage, wie kann ich diese "L" verhindern?

    vom COM-Port kommen sie definitiv nicht, hiermit habe ich es schon probiert:

    if ((daten != 'L') && (daten != 'd')) fprintf(test, datenPtr);
    

    Vielen Dank schon mal an alle für die hilfreichen Tips!



  • datenptr ist nicht nullterminiert. Dadurch wird mit ausgegeben, was hinter deinem char so im Speicher rumliegt. Zudem kann es toll knallen, wenn dein COM-Port jemals ein Prozentzeichen sendet.

    fprintf(test, "%c", daten);
    


  • Noch besser wäre es, die Funkton zu nehmen, die für die Ausgabe von einem Zeichen gedacht ist: fputc.

    fputc( daten, test);
    fputc( ' ',   test);
    fputc( '\n',  test);
    

    ⚠ fputc erwartet ein Zeichen und keinen Zeiger auf char (String).



  • fputc funktioniert bestens, vielen dank!


Anmelden zum Antworten