c语言 - 当scanf(fscanf)遇到EOF时,存储在参数变量中的值是多少?


int *ptr = malloc~
while (fscanf(fp, "%d", ptr++) != EOF)
    ;

假设有足够的内存分配给 ptr,当函数 enouters EOF 指示什么时,存储在 *ptr 中的值是什么?我尝试在Visual Studio中使用调试工具,发现*ptr的值是-33686019这是垃圾值吗?还是EOF?

当scanf命中EOF时,ptr指向的地址上不存储任何值。同样,如果它返回 0。这就是为什么迭代输入的规范方式必须检查 scanf 返回值,例如

if (fscanf(fp, "%d", &ptr_to_int) == 1) {
  /* successful conversion */
}
else {
  /* Unsuccesful conversion or EOF; use feof() to test which. */
}

最新更新