sscanf
-
Hallo,
ich habe ein kleines Problem mit sscanf, oder sitze einfach auf der Leitung
unsigned short mpi; char varname[64]; unsigned char typ; unsigned short db_nr; unsigned short byte_nr; unsigned short bit; char vartyp[20]; sscanf (zeile , "%hu ; %s ; %c ; %hu ; %hu ; %hu ; %s" ,&mpi,&varname[0],&typ,&db_nr,&byte_nr,&bit,&vartyp[0]);
Die "zeile" sieht so aus
"11 ; M_stoerung_32_1 ; D ; 0 ; 0 ; 0 ; dword"
Es wird nur die "11" in die Variable mpi gelesen. Der Rest wird komplett in die Variable &varname[0] gelesen, warum .... die Trenner ";" sollten doch funktionieren.
Gruß
-
%s ließt bis zu einem whitespace ein. Du kannst stattdessen %[^;\n] verwenden, welches bis zu einem Whitespace oder ; ließt.
-
Wenn alles mit %s eingelesen wird, hat dein String keine Leerzeichen.
scanf
geht den Formatstring einmal durch. Dabei liest es die zum Formatspecifier passenden Zeichen ein. Andere Zeichen werden entsprechend eingelesen.
Whitespace gelten dabei für beliebig viele Whitespace (egal welche).
-
worst_case schrieb:
Hallo,
ich habe ein kleines Problem mit sscanf, oder sitze einfach auf der Leitung
Seit 2003?
https://www.c-plusplus.net/forum/25645
-
Furble Wurble schrieb:
worst_case schrieb:
Hallo,
ich habe ein kleines Problem mit sscanf, oder sitze einfach auf der Leitung
Seit 2003?
https://www.c-plusplus.net/forum/25645Lol. Wie findest du so etwas?
-
Hallo,
man sieht, nach 13 Jahren immer noch Probleme mit sscanf
Danke
-
SeppJ schrieb:
Furble Wurble schrieb:
Lol. Wie findest du so etwas?
Ich war nur neugierig, wie, wo und womit worst_case vor vierzehn Jahren angefangen hat, hier im Forum. Ich wollte nämlich schon die alte Leier vom minimalen Beispiel bringen. Zufällig sprang mir dabei das Topic des alten Threads in die Augen...
worst_case schrieb:
man sieht, nach 13 Jahren immer noch Probleme mit sscanf
Jetzt mal im ernst:
Dein String sieht anders aus, als Du ihn im ersten Post gebracht hast, oder? Denn eigentlich sollte alles funktionieren. Deswegen wäre ein minimales Beispiel(s.o.), das das unerwünschte Verhalten zeigt sehr wichtig gewesen.