在C中打开文件时出现分段错误?

时间:2016-10-22 20:38:56

标签: c arrays file fault

我对编程非常陌生,而且我正在尝试编写读取" 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;
}

我不断遇到分段错误,我已经改变了很多东西来试图找出它。有人可以帮我一把吗?谢谢!

1 个答案:

答案 0 :(得分:0)

使用while语句的结构是问题所在。在每次迭代开始时,您已经使用fgetc()获取下一个字符,并将其分配给cur。然后在循环内部,在if(...)语句中,您通过调用新cur并将结果分配给fgetc()来放弃cur。因此,请按以下方式更改它:

while ((cur = fgetc(spData)) != EOF) {
    if (cur == '\t') {
    size++;}
}

您看,当您尝试两次调用fgetc()时(while(...)if(...)),您可能会EOF中的if(...)声明。然后在下一次使用while(...)语句的迭代中,您尝试访问文件中的某个位置,这会为您提供分段错误。