这是我的代码:

#include <stdio.h>

int main(void) {

        FILE *fp;
        unsigned int i;
        char bytes[512];
        fp = fopen("myFile","r");
        for(i = 0;i <= 512;i++) {
                fread(&bytes, sizeof(bytes), 1, fp);
                printf("bytes[%d]: %x\n", i, bytes[i]);
        }
}

这是预期的产量
$ hexdump myFile
0000000 aa55 aa55 0060 0000 0a17 0000 b1a5 a2ea
0000010 0000 0000 614c 7563 616e 0000 0000 0000
0000020 0000 0000 0a68 0000 1001 421e 0000 0000
0000030 f6a0 487d ffff ffff 0040 0000 002f 0000

但这是我在节目中看到的
bytes[0]: 55
bytes[1]: 8
bytes[2]: ffffffc8
bytes[3]: ffffffdd
bytes[4]: 22
bytes[5]: ffffffc8
bytes[6]: ffffff91
bytes[7]: 63
bytes[8]: ffffff82

我明显的猜测是,我要么是地址不对,接收错误的数据回来,要么是打印错误,查看错误的方式。

最佳答案

每次循环都从文件中连续读取512字节的块,并且只打印每个块中的一个字节您可能希望一次性读取这些512字节,然后打印出来,如下所示:

fread(&bytes, sizeof(bytes), 1, fp);
for(i = 0;i < 512;i++) {
    printf("bytes[%d]: %x\n", i, bytes[i]);
}

(另外:一些错误检查不会出错,正如Dav指出的那样,您应该检查您是否确实正在从文件中读取预期的字节数。)

关于c - 为什么在C中用fread()无法获得预期的结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2581557/

10-10 18:00