【发布时间】:2020-10-03 14:47:34
【问题描述】:
我正在使用 IAR 嵌入式工作台进行编程。我有支持 microSD 存储卡的评估板。 我拥有所有库,并且应用程序正在运行。我试图访问 sd 卡中不存在的文件来模拟失败并捕获任何文件打开错误。
#include <errno.h>
#include <string.h>
int IsFileExists(const char* filename) {
errno = 0;
FILE* fptr = fopen(filename, "r");
printf("Error:%d %s",errno,strerror(errno))
if (fptr != NULL) {
fclose(fptr);
return 1;
}
return 0;
}
fptr 为 NULL,errno 始终为 0。为什么errno没有设置为非零值?
谢谢!
【问题讨论】:
-
你错过了
<stdio.h> -
您收到来自
strerror(errno)的正确消息了吗? -
扩展 Barmar 的问题:你的程序产生什么具体的输出?
-
当然,您系统的
fopen可能根本没有将errno设置为错误。它的文档是否声称它确实如此?据我所知,C 标准不需要它。 -
关于:
FILE* fptr = fopen(filename, "r");这是一个非常糟糕的主意。建议使用stat(2)判断文件是否存在。