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
小于 2
,argv[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).
编辑:不要忘记在使用完所有打开的文件后将其关闭。
这是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
小于 2
,argv[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).
编辑:不要忘记在使用完所有打开的文件后将其关闭。