c - 即使文件不存在 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);
}
我有两个问题:
我的理解是如果文件在上述路径中不存在,那么 fopen 应该返回一个 NULL。观察结果是:即使文件在上述路径 (/prj/vlsi/....) 中不存在,fopen 也会返回一些值,然后进入 while 循环尝试打印内容。为什么会这样?我的 main.c 和 hex 文件位于同一路径中。但我仍然尝试给出也给出相同结果的完整路径(即即使文件不存在它返回一个非零指针值)
当代码执行 while 循环时,它会无限期地打印“FF”。应该是上面说的原因。
请帮助了解问题以及如何调试此类问题?
解决方案
使用 aint
而不是char
forch
1) 因为fgetc
返回一个int
C 库函数 int fgetc(FILE *stream) 从指定的流中获取下一个字符(无符号字符)并推进流的位置指示符。
2)因为EOF
可以定义为一些无法表示的数字char
相同的boot_rom_golden
推荐阅读
- python - 如何在 Pyparsing 中编写字段定义,以免发生以下错误
- python - 使用 np.savetxt() 将多个数组保存在一个文件中
- javascript - 使用 javascript 从日期时间格式获取 cron 格式
- r - 填充按 ID 分组的间隔之间的值
- python - 如何更改散点矩阵中的配色方案?
- angular - 在 HTTP 拦截器中插入异步令牌
- laravel - 通过模块的作曲家安装包时无法识别错误类名
- javascript - 排序功能并忘记以前的结果
- sql-server - 无法通过 Logstash 将数据从 MS Sql Server 传输到 ElasticSearch
- azure - Azure 部署失败