未设置C fopen errno

问题描述

我正在使用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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...