【发布时间】:2016-10-29 03:29:52
【问题描述】:
我正在尝试计算我从 argv 指定的文件中的行数和字符数。但是由于某种原因,当我点击 while 循环时出现分段错误。程序在没有 while 循环的情况下运行良好,尽管它只执行一次。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if(argc != 2) {
return 0;
}
FILE *fp;
char c;
int lines = 0;
int chs = 0;
fp = fopen(argv[1], "r");
//Segmentation Fault happens here on the while loop
while((c = fgetc(fp)) != EOF) {
if(c == '\n') {
lines += 1;
}
else {
chs += 1;
}
}
printf("Charaters: %d\n", chs);
printf("lines: %d\n", lines);
if(fp){
fclose(fp);
}
return 0;
}
【问题讨论】:
-
在进入循环之前,您还没有检查
fopen()是否成功(fp != NULL)。将NULL指针传递给fgetc()会产生未定义的行为。 -
fgetc故意返回int。 -
问题是我打开了一个空文件。所以我应该先检查它是否为空。
标签: c gcc segmentation-fault