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

时间:2017-03-27 06:49:21

标签: c eof scanf

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

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

1 个答案:

答案 0 :(得分:3)

当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. */
}