したがって、次のような行に直面したときにsscanfがどのように機能するのか疑問に思っています。
sscanf(input_string, "%s %s %s", cmd1, cmd2, cmd3);
ただし、input_stringに含まれる文字列トークンは1つだけだとします。cmd2とcmd3にはどのような値が割り当てられていますか?エラーがスローされますか?
GNUCコンパイラを使用しています。
追加のパラメーターには何も割り当てられません。からの戻り値はsscanf
、正常に実行された変換の数を示しているため、この場合はを返し1
ます。通常は、期待する数と比較するだけで、それ以外の場合は入力が悪いと想定します。
if (3 != sscanf(input_string,"%s %s %s", cmd1, cmd2, cmd3))
fprintf(stderr, "Badly formatted input (expecting three strings)\n");
ファイルから読み取る場合、正しい入力が得られるまでループで実行したいことがよくあります。
while (3 != scanf("%s %s %s", cmd1, cmd2, cmd3))
fprintf(stderr, "Please enter 3 strings:");
http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/
成功すると、関数は引数リスト内の正常に入力された項目の数を返します。この数は、予想されるアイテム数と一致する場合もあれば、一致しない場合はゼロになる場合もあります。データが正常に解釈される前に入力が失敗した場合、EOFが返されます。