问题描述
我正在使用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未设置为非零值?
谢谢!
解决方法
C99-7.19.5.3(8)在fopen()返回时对errno没说什么。 设置errno需要一些其他功能(例如C99-7.19.9.3 fsetpos())。 因此,似乎不需要fopen。
您正在使用什么操作系统?
,必须将errorno声明为外部值。 并且您无需将errorno设置为0。 运行后fopen功能会自动设置。 请参阅:https://www.tutorialspoint.com/cprogramming/c_error_handling.htm