字数,分段错误 - C.

时间:2016-03-15 23:25:00

标签: c segmentation-fault word-count

我试图运行一个找到文件字数的程序。每次编译程序时,它都会给我一个分段错误(Core Dumped)。无法弄清楚原因。

#include <stdio.h>

int main(int argc, char* argv[]){
    int wc = 1;
    FILE *input = fopen(argv[1],"r");
    char c = fgetc(input);
    while(c != EOF){
        if(c == ' '){
            wc++;
        }
        else
            c = fgetc(input);
    }
    fclose(input);
    printf("Word Count = %d", wc);

return 0;
}

1 个答案:

答案 0 :(得分:1)

您可能因为未在命令行中传入文件名而进行分类。执行此操作时,argv[1]为NULL,因此fopen将取消引用NULL指针。

您可以在命令行上将文件名传递给您的程序,如下所示:

./my_program file_to_test

要防止核心转储,您应该通过检查argc的值来检查是否传入了参数。您还应检查fopen的返回值以确保文件已打开:

if (argc < 2) {
    printf("no file name given");
    exit(1);
}
FILE *input = fopen(argv[1],"r");
if (input == NULL) {
    perror("fopen failed");
    exit(1);
}

然后你有另一个问题:

    if(c == ' '){
        wc++;
    }
    else
        c = fgetc(input);

当您找到空格字符时,您不会尝试阅读下一个字符。因此,c在读取空格后不会发生变化,从而导致无限循环。

您需要摆脱else并始终致电fgetc

    if(c == ' '){
        wc++;
    }
    c = fgetc(input);

此外,fgetc函数会返回int(实际上unsigned char强制转换为int),因此您应将c声明为{{} 1}}。否则,对int进行检查可能会失败。