C fgets()分段错误

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

我有一个简单的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",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”)
查找打开文件的错误。