ubuntu 中 C 中的分段错误(核心已转储)

segmentation fault(core dumped) in C in ubuntu

这是main.c

这是print.c

#include <stdio.h>
int wc(FILE *pointer)
{ 
  int a;
  int character=0,word=0,line=0;
  a = getc(pointer);
  while ( a != EOF )
  { 
    character++;
    if (a == ' ')
      word++;
    if (a == '\n')
       line++;
    a = getc(pointer);
  }

  printf("character: %4d, word: %4d, line: %4d \n", character,word,line);
  return 0;
}

这是word.c

gcc -c print.c
gcc -c word.c
gcc -c main.c
gcc -o main main.o print.o word.o
./main
text.txt
text.txt
segmentation fault (core dumped)

这是我使用的编译方式

但我不知道为什么会出现分段错误(核心已转储)。

请帮助我。

main() 中,您应该通过查看 return 值是否为 NULL 来检查 fopen() 是否成功,在这种情况下会发生错误。

此外,即使条件 argc>1 不满足 main() 中的第二个 fopen(),您也在使用 argv[1]。如果 argc 小于 2argv[1] 将不存在。

printfile()while 循环中,break 语句将在第一次迭代时执行。

因此,将 while 变成 if 语句并删除 break 会产生相同的效果。

wc()while循环中,

if (a == ' ')
  word++;
if (a == '\n')
   line++;

可以制作

if (a == ' ')
  word++;
else if (a == '\n')
   line++;

无需检查 a 是否为 \n 如果 a(space).

编辑:不要忘记在使用完所有打开的文件后将其关闭。