Ich möchte eine Zeile sscanf und stellen Sie sicher, dass es nichts mehr gibt, als was ich darin wollte. Der Code sieht wie folgt aus:Wie scansf um sicherzustellen, dass der Puffer genau das ist, was ich wollte?
void parse_init_command(char *buffer, command *new_command) {
if (sscanf(buffer,
"%s %d %d %d %d %d %d %d\n",
new_command->name,
&new_command->data[0],
&new_command->data[1],
&new_command->data[2],
&new_command->data[3],
&new_command->data[4],
&new_command->data[5],
&new_command->data[6]) != 8) {
strncpy(new_command->name, "WRONG_INPUT", 15);
}
}
Wenn ich eine Eingabe wie bekommen:
INIT 9 11 3 1 1 1 9
alles ist in Ordnung, aber dann eine Eingabe wie dieses ist
INIT 9 11 3 1 1 1 9 s
auch angenommen. Ich dachte, wenn ich "\ n" hinzufüge, würde alles gut funktionieren, da ich weiß, dass jede Eingabezeile mit einem EOL endet, aber das tat es nicht.
'scanf' behandelt das Zeichen für neue Zeilen als Leerzeichen, genau wie Tabulatoren und Leerzeichen. Sie könnten einen neunten Dummy-Wert lesen, eine kurze Zeichenfolge mit erzwungenem max. width ('% 2s') vielleicht und erzwinge, dass die Anzahl der Conversions nicht über 8 liegt. –
Wird der Puffer initialisiert, bevor er in diese Funktion übergeben wird? – bentank