我有一个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”。应该是由于上述原因。
请帮助了解该问题以及如何调试此类问题?
答案 0 :(得分:1)
为int
使用char
代替ch
1)因为fgetc
返回了int
C库函数int fgetc(FILE * stream)获取下一个字符 (无符号字符)从指定的流,并提高位置 流的指示器。
2)因为EOF
可以定义为char
无法表示的某个数字
与boot_rom_golden
答案 1 :(得分:0)
当我在系统上编译并运行代码时,它的行为与您期望的一样:myFile
成为空指针,并且空测试导致早期退出。在您的计算机上,myFile == NULL
是不正确的,并且不会发生提前退出。
我推断出您实际执行的代码与您发布的代码不同,或者您的环境中发生的事情与我的有所不同。
您可以逐行跟踪吗?
您确定在执行该命令时您的系统上不存在该文件吗?
也许正在发生截断?尝试使用短路径和短文件名。
尝试使用绝对文件路径,而不是相对路径。
Null可能是一个宏-也许这不是您的想法?尝试使用if(myFile)
作为替代。
如果未解决,请发布有关系统的更多信息,并告诉我们myFile
是什么,如果您的系统认为它不等于NULL。