に十分な入力が得られるかどうかわからない場合がありますsscanf
。sscanf
見つからない引数を台無しにしないと安全に想定できますか?
たとえば、このプログラムでは次のようになります。
#include <stdio.h>
int main(int argc, char** argv) {
int a = 0, b = 0, c = 0;
sscanf("1 2", "%d %d %d", &a, &b, &c);
printf("%d %d %d\n", a, b, c);
return 0;
}
出力は次のとおりです。
1 2 0
つまり、3 つの数字のうち 2 つを読み取り、最後の数字を台無しにしませんでした。この場合、すべてのコンパイラと標準ライブラリも最後の引数をそのままにしておくと安全に想定できますか、それとも次のようなことをする必要がありますか?
int main(int argc, char** argv) {
int a = 0, b = 0, c = 0;
if (sscanf("1 2", "%d %d %d", &a, &b, &c) != 3) {
c = 0;
}
printf("%d %d %d\n", a, b, c);
return 0;
}