Hyu*_* Go 1 c gcc scanf undefined-behavior
我正在使用 gcc 4.4.7。
当我在简单的逻辑(C lang)下运行时。
然后输入'1 2'。
int var1 = 0;
int var2 = 0;
if(!scanf("%ld %ld",&var1, &var2))
{
printf("--- ERROR\n");
}
else
{
printf("--- var1 [%ld] \n", var1);
printf("--- var2 [%ld] \n", var2);
}
Run Code Online (Sandbox Code Playgroud)
结果:--- var1 [0] --- var2 [2]
我已经知道 %ld 适用于 long int。我真正想知道的是 scanf 是如何详细工作的。 当我尝试扫描 2 个或更多数字时会发生这种情况。
格式说明符%ld是 for long int(和%lldfor long long int)。
int应该与%d格式说明符匹配。使用格式说明,它不与变量类型的潜在客户同意未定义行为。
不要使用!运算符检查 scanf 的返回值,而是使用预期的转换次数,如下所示:
if(scanf("%d %d", &var1, &var2) != 2)
printf("--- ERROR\n");
Run Code Online (Sandbox Code Playgroud)
进一步阅读
当我使用错误的格式说明符时会发生什么?