C fgets()分段错误
我有一个简单的c代码,从文件中读取一行并打印到存在任何一行,但是当我想在linux mint上运行它时,会出现一个get segmentation错误,代码是:C fgets()分段错误,c,segmentation-fault,C,Segmentation Fault,我有一个简单的c代码,从文件中读取一行并打印到存在任何一行,但是当我想在linux mint上运行它时,会出现一个get segmentation错误,代码是: # include <stdio.h> int main(){ FILE * fr; fr = fopen ("t.txt", "rt"); char line[100]; while(fgets(line, 100, fr) != NULL) { printf("%s
# include <stdio.h>
int main(){
FILE * fr;
fr = fopen ("t.txt", "rt");
char line[100];
while(fgets(line, 100, fr) != NULL)
{
printf("%s",line);
}
fclose(fr);
}
#包括
int main(){
文件*fr;
fr=fopen(“t.txt”、“rt”);
字符行[100];
while(fgets(第100行,fr)!=NULL)
{
printf(“%s”,第行);
}
fclose(fr);
}
gdb说:程序接收到信号SIGSEGV,分段错误。
来自/lib/i386 linux gnu/libc.so.6的fgets()中的0xb7e82b07
(gdb)
但是我找不到问题,有人能帮我吗
fr = fopen ("t.txt", "rt");
您是从哪里想到使用“rt”
?这不是fopen()
的有效选项,因此它将返回NULL
。。。剩下的就看你的想象了
寓意:进行错误检查。在尝试使用前,也许您可以尝试确保
fr
是有效的?”如果字符串是以下字符串之一,则文件将以指定模式打开。否则,行为是未定义的。“如何确保fr是有效的?”sandra Uh,这对您来说会很困难。如果你连文档都看不懂(或者,可怕的是,你甚至都没读过),也许可以回到基本的问题上来。检查fopen
的返回值,如果NULL
,请使用errno
和strerror
或perror
来找出问题所在。在microsoft编译器中,“rt”
将以文本模式打开进行读取:(其行为应与“r”
相同,因此它毫无意义),我认为(但很可能是错误的)GCC也毫不犹豫地接受了它。我认为更可能的问题是,t.txt
根本不在当前的工作目录中。@Dave这不是标准的-从这一点上说,我对微软(或GNU)是否做对了不感兴趣。我的观点是,尽管“rt”
当然应该改为“r”
,实际问题似乎在别处(即CWD不是预期的,这是一个常见问题)。我将“rb”模式改为“r”。问题仍然存在,code和t.txt文件在桌面上。@sandra可能检查errno
和/或perror(“fopen”)
查找打开文件的错误。