首页 > 解决方案 > 即使文件不存在 fopen 返回非空指针

问题描述

我有一个 Hex 文件,其内容如下:

0x14000800 0x52100000 0xD503201F 0xD503201F 0x0030A308 0x0032D138 0x00000000 0x00000000 0x00000000 0x00000000

我需要打开并阅读这个文件。下面是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
 char ch, boot_rom_golden[16];
 FILE *myFile = NULL;

 myFile = fopen("/prj/vlsi/tests/boot_rom_fail/src/apps_proc0/sm6140_rom.a52100000_ROM_FULL.hex", "r");

 if (myFile == NULL) {
    printf("Error Reading File\n");
    exit(0);
  }

while ((ch = fgetc(myFile)) != EOF) {
printf("%x \n", ch);
}

我有两个问题:

  1. 我的理解是如果文件在上述路径中不存在,那么 fopen 应该返回一个 NULL。观察结果是:即使文件在上述路径 (/prj/vlsi/....) 中不存在,fopen 也会返回一些值,然后进入 while 循环尝试打印内容。为什么会这样?我的 main.c 和 hex 文件位于同一路径中。但我仍然尝试给出也给出相同结果的完整路径(即即使文件不存在它返回一个非零指针值)

  2. 当代码执行 while 循环时,它会无限期地打印“FF”。应该是上面说的原因。

请帮助了解问题以及如何调试此类问题?

标签: cfile

解决方案


使用 aint而不是charforch

1) 因为fgetc返回一个int

C 库函数 int fgetc(FILE *stream) 从指定的流中获取下一个字符(无符号字符)并推进流的位置指示符。

2)因为EOF可以定义为一些无法表示的数字char

相同的boot_rom_golden


推荐阅读