gpt4 book ai didi

c - 字数统计、段错误 - C

转载 作者:行者123 更新时间:2023-11-30 15:10:42 25 4
gpt4 key购买 nike

我正在尝试运行一个程序来查找文件的字数。每次我编译程序时,都会出现段错误(核心转储)。不明白为什么。

#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;
}

最佳答案

您可能会出现段错误,因为您没有在命令行上传递文件名。当您这样做时,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声明为int。否则,根据 EOF 检查它可能会失败。

关于c - 字数统计、段错误 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36024144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com