私はその行にsscanfを付けて、私が望んでいたものが何もないことを確認したいと思います。私は以下のように入力を取得するとどのようにsscanfは、バッファがまさに私が望んでいたことを確認するには?
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);
}
}
:コードは次のようになります
INIT 9 11 3 1 1 1 9
すべてが正常であるが、その後、この
INIT 9 11 3 1 1 1 9 s
などの入力も受け入れられています。私は、すべての入力行がEOLで終わっていることを知っているので、 "\ n"を追加するとすべてがうまくいくと思っていましたが、そうではありませんでした。
'scanf'は改行文字をタブとスペースのように空白として扱います。あなたは9番目のダミー値、強制された最大の短い文字列を読むことができます。 (%2s')おそらく、そして変換の数が8を超えないように強制してください。 –
あなたのバッファはこの関数に渡される前に初期化されていますか? – bentank