C:fscanf擦除整数变量值?

时间:2010-10-06 04:25:41

标签: c scanf

我有一个C程序在进入while循环时遇到错误。

我初始化一个变量(fragmentcount)并使用fscanf写入它并为其赋值4(这可行)

int fragmentCount;
if ((fscanf(fp, "%i", &fragmentCount)) == 1) {
   ...
}

但是,当我尝试在下面的while循环中访问它时,fragmentCount = 0

while ((fscanf(fp, "%[#]", discards)) != EOF) {
   printf(fragmentCount); // <- pseudocode
}

对于一个简短的实验,我尝试将fscanf作为while循环的条件测试,并且fragmentCount是正确的值(4)。

为什么会这样?我怎么能避免这个?

2 个答案:

答案 0 :(得分:1)

discards如何宣布? fscanf可能正在读取的数据多于discards有空间的数据,这可能会覆盖其他变量的值。

使用没有字段宽度的'%['格式是一个坏主意 - 它leaves your program open to buffer overflow errors

答案 1 :(得分:0)

fscanf从文件中读取值并根据格式字符串对其进行解释。根据{{​​3}},'%i'格式字符串未知(也许您的意思是'%d'?),因此您不太可能读取您期望的值。

除文件FILE*和格式字符串外,fscanf的所有参数都是out参数,这意味着在调用fscanf之前它们包含的值无关且可以替换。