我是在 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.