尽管非空文件

时间:2016-11-25 23:38:22

标签: c fread randomaccessfile

我正在尝试从65536字节文件中将256字节读入缓冲区,使用fopen,fread,fwrite和fseek将其视为随机访问文件。我没有收到任何错误,但读取后缓冲区仍为空,即使文件非空并且fread报告读取256个字节。这是我的代码:

    FILE *file = NULL;
    char buffer[255];
    memset(buffer, 0, sizeof(buffer));

    file = fopen("BACKING_STORE.bin","r");

    if(file == NULL) {
            printf("Error: can't open file.\n");
            return NULL;
    } // end if

    if(fread(buffer, 1, 256, file) != 256) {
            printf("Error: reading from file failed.\n");
            return NULL;
    } // end if

    printf("The bytes read are [%s]\n", buffer);

    fclose(file);

为了确认,我在十六进制编辑器中打开了BACKING_STORE.bin文件,以确保它不是空的。这是截图: enter image description here

运行此程序后,我得到输出:“读取的字节数为[]”,但没有任何错误。

我对C很新,所以我确信这只是一件我想念的简单事。

感谢您的帮助。 :)

1 个答案:

答案 0 :(得分:3)

因为您无法使用"%s"printf()输出二进制数据。如果要查看内容,可以编写循环并打印每个字节的十六进制值,如下所示

for (size_t i = 0 ; i < 256 ; ++i) {
    fprintf(stdout, "0x%02x ", buffer[i]);
    if ((i + 1) % 8 == 0) {
        fputc('\n', stdout);
    }
}