C fopen未打开文件流。。。我如何解决这个问题?
我正在尝试编写一个文件并向其添加数据 下面是我的代码片段。thresh是一个无符号的短字符C fopen未打开文件流。。。我如何解决这个问题?,c,fopen,C,Fopen,我正在尝试编写一个文件并向其添加数据 下面是我的代码片段。thresh是一个无符号的短字符 FILE *fp_th; fp_th = fopen("threshold.txt", "a"); printf("opening file failed: %s\n", strerror(errno)); fprintf(fp_th,"%d ", thresh); fclose(fp_th); 以前它工作得很好,但我修改了一些代码,突然它不再打印了 我已确认fopen没
FILE *fp_th;
fp_th = fopen("threshold.txt", "a");
printf("opening file failed: %s\n", strerror(errno));
fprintf(fp_th,"%d ", thresh);
fclose(fp_th);
以前它工作得很好,但我修改了一些代码,突然它不再打印了
我已确认fopen没有使用打开文件流
printf(" check fp_th = %p \n", fp_th);
它打印出检查fp_th=00000000
编辑:添加了printf(“打开文件失败:%s\n”,strerror(errno))代码>在fopen之后。输出显示没有错误。这是谎言吗?奇怪
奇怪的是,我正在编写并附加一个类似的文件,但该文件工作正常。如何解析返回NULL的fopen?为什么会这样?谢谢 首先
fprintf(fp_th,"%d ", thresh);
通常将缓冲输出,直到您关闭文件,或内部文件*缓冲区已满。您可能无法立即在文件中看到任何输出
您可以使用fflush()将文件*写入,以便在您决定时将其写入文件
fprintf(fp_th,"%d ", thresh);
fflush(fp_th);
其次
printf(" check fp_th = %d \n", fp_th);
这不会检查fp_th
是否无效。它只是将fp_th的指针值打印为有符号整数,-7323824可能与任何值一样好,这将更加没有意义,如果指针的大小与int的大小不同,则可能未定义
要打印指针,应使用%p
printf(" check fp_th = %p \n", fp_th);
如果fopen失败,它将返回NULL,您应该检查它以了解打开文件是否失败
FILE *fp_th;
fp_th = fopen("threshold.txt", "a");
if(fp_th == NULL) {
printf("opening file failed: %s\n", strerror(errno));
return;
}
首先
fprintf(fp_th,"%d ", thresh);
通常将缓冲输出,直到您关闭文件,或内部文件*缓冲区已满。您可能无法立即在文件中看到任何输出
您可以使用fflush()将文件*写入,以便在您决定时将其写入文件
fprintf(fp_th,"%d ", thresh);
fflush(fp_th);
其次
printf(" check fp_th = %d \n", fp_th);
这不会检查fp_th
是否无效。它只是将fp_th的指针值打印为有符号整数,-7323824可能与任何值一样好,这将更加没有意义,如果指针的大小与int的大小不同,则可能未定义
要打印指针,应使用%p
printf(" check fp_th = %p \n", fp_th);
如果fopen失败,它将返回NULL,您应该检查它以了解打开文件是否失败
FILE *fp_th;
fp_th = fopen("threshold.txt", "a");
if(fp_th == NULL) {
printf("opening file failed: %s\n", strerror(errno));
return;
}
以前它工作得很好,但我修改了一些代码,突然它不再打印了
如果您的代码更改了当前工作目录,这可能会导致找不到文件,因为您没有提供完整路径。在这种情况下,fp_th
应该是一个空指针,您可以检查它。您的打印表明它没有返回空指针,而是打开了文件。有关详细信息,请参阅
以前它工作得很好,但我修改了一些代码,突然它不再打印了
如果您的代码更改了当前工作目录,这可能会导致找不到文件,因为您没有提供完整路径。在这种情况下,fp_th
应该是一个空指针,您可以检查它。您的打印表明它没有返回空指针,而是打开了文件。有关详细信息,请参阅。首先,始终检查fopen
的返回值是否为NULL,这意味着失败
要找出文件打开过程中出现的问题,可以使用perror
if (fp_th == NULL) {
perror ("Error opening threshold file");
exit(EXIT_FAILURE);
}
如果您仍然无法确定您是否获得了被拒绝的权限
或没有这样的文件或目录
,您可以使用strace
(假设为Linux)并查找相应的系统调用。首先,始终检查fopen
的返回值是否为NULL,这意味着失败
要找出文件打开过程中出现的问题,可以使用perror
if (fp_th == NULL) {
perror ("Error opening threshold file");
exit(EXIT_FAILURE);
}
如果您仍然无法确定您是否获得了被拒绝的权限
或没有这样的文件或目录
,您可以使用strace
(假设为Linux)并查找相应的系统调用。我今天遇到了类似的问题。我的代码正在打开N-1个文件,但在第N个文件中神秘地崩溃了,尽管该文件确实存在
佩罗透露,我实际上从未关闭过所有这些文件——令我尴尬的是,我忘记了fclose(fd)
到目前为止,我还没有使用perror,但我现在意识到它的价值有多大。:) 我今天也有类似的问题。我的代码正在打开N-1个文件,但在第N个文件中神秘地崩溃了,尽管该文件确实存在
佩罗透露,我实际上从未关闭过所有这些文件——令我尴尬的是,我忘记了fclose(fd)
到目前为止,我还没有使用perror,但我现在意识到它的价值有多大。:) 我想,我的程序中那些不重要的东西。你们只需要知道我想写什么,这是我的变量thresh,一个无符号的short。fprintf处于循环中。然而,fopen远远早于此循环。我的threshold.txt永远不会被创建。有什么想法吗?“我的节目中不重要的东西”著名的临终遗言。哈哈。。。我想相信是这样的。但一次又一次,我知道这会适得其反。然而,我认为,做一个fopen是很简单的(再次事与愿违),当fopen失败时,它会设置errno
变量。如果失败,请尝试添加以下行(检查fp_th是否为NULL):perror(“fopen失败”)代码>不要忘了#包括
编辑:在我的程序中,看看下面祖兰的答案,我认为这不重要。你们只需要知道我想写什么,这是我的变量thresh,一个无符号的short。fprintf处于循环中。然而,fopen远远早于此循环。我的threshold.txt永远不会被创建。有什么想法吗?“我的节目中不重要的东西”著名的临终遗言。哈哈。。。我想相信是这样的。但一次又一次,我知道这会适得其反。然而,我认为,做一个fopen是很简单的(再次适得其反),当fopen失败时,它会设置errno