scanf 整数与 %ld %ld 无法正常工作

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 个或更多数字时会发生这种情况。

gsa*_*ras 7

格式说明符%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)

进一步阅读
当我使用错误的格式说明符时会发生什么?

  • 未提及的关键点是,使用与变量类型不相符的格式会导致未定义的行为。在那之后试图理解任何事情都是毫无价值的。 (6认同)