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!