使用 fopen 打开文件进行读取时遇到问题

Mic*_*sky 0 c linux fopen

我是在 linux 下编写 c 的新手,所以这可能是一个愚蠢的问题,但我在使用 fopen 时遇到了问题。当我遇到这个问题时,我只是用这个非常简单的代码试了一下:

#include <stdio.h>
#include<stdlib.h>

int main()
{
   FILE *test;

   if( fopen("test.txt","r") == NULL )
       printf("didnt open");
   else
       printf("opened!");

   fclose(test); 
}
Run Code Online (Sandbox Code Playgroud)

test.txt 与此代码和 a.out 位于同一文件夹中。当我调试 a.out 时,我得到:

Breakpoint 1, main () at testit.c:14
14      if( fopen("test.txt","r") == NULL )
(gdb) s
_IO_new_fopen (filename=0x400696 "test.txt", mode=0x400694 "r") at iofopen.c:103
103   iofopen.c: No such file or directory.
(gdb) s
__fopen_internal (filename=0x400696 "test.txt", mode=0x400694 "r", is32=1) at iofopen.c:65
65  in iofopen.c
(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.
_IO_new_fclose (fp=0x0) at iofclose.c:54
54  iofclose.c: No such file or directory.
Run Code Online (Sandbox Code Playgroud)

我尝试更改路径:if( fopen("/home/h1657/Work/test/test.txt","r") == NULL ). 有同样的效果。

如果这是基本问题,我很抱歉,但我找不到任何解决方案。

小智 5

关于gdb的消息:

iofopen.c: No such file or directory.
Run Code Online (Sandbox Code Playgroud)

gdb无论如何,即使您的代码是正确的,您也会收到该消息。那是因为您正在使用step而不是next.

完整解释如下:

” step 命令跟随代码进入函数调用。当单步执行时,gdb 在执行之前打印每个源代码行。如果你单步进入库函数,gdb 想要显示源代码,但那些文件在系统上不可用。投诉是预期且无害的。如果您改为使用下一个命令,它将跳过并将整个调用视为一个步骤。”

来自http://web.stanford.edu/class/cs107/guide_gdb.html

事实上,gdb再次尝试使用正确的代码,step您将得到相同的消息iofopen.c: No such file or directory.