我对编程非常陌生,而且我正在尝试编写读取" numbers.tsv4" (.tsv4表示制表符分隔值,4表示一行)并将数字放入数组中。现在我只关注计算文件中的数字量,所以我可以初始化数组大小。
int main(void)
{
int cur;
FILE* spData;
int size=1;
spData = fopen("numbers.tsv4", "r");
while ((cur = fgetc(spData)) != EOF) {
if ((cur = fgetc(spData)) == '\t') {
size++;}
}
fclose(spData);
printf("%d", size);
return;
}
我不断遇到分段错误,我已经改变了很多东西来试图找出它。有人可以帮我一把吗?谢谢!
答案 0 :(得分:0)
使用while语句的结构是问题所在。在每次迭代开始时,您已经使用fgetc()
获取下一个字符,并将其分配给cur
。然后在循环内部,在if(...)
语句中,您通过调用新cur
并将结果分配给fgetc()
来放弃cur
。因此,请按以下方式更改它:
while ((cur = fgetc(spData)) != EOF) {
if (cur == '\t') {
size++;}
}
您看,当您尝试两次调用fgetc()
时(while(...)
和if(...)
),您可能会EOF
中的if(...)
声明。然后在下一次使用while(...)
语句的迭代中,您尝试访问文件中的某个位置,这会为您提供分段错误。