c - 尽管文件非空,但读取到缓冲区的内容为空

标签 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 相当陌生,所以我确信这只是我缺少的一些简单的东西。

感谢您的帮助。 :)

最佳答案

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

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

关于c - 尽管文件非空,但读取到缓冲区的内容为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40813492/

相关文章:

c - 返回指针的函数

c - 读取具有大值的 unsigned int 时,Fread 返回错误值

java - readUTF 工作一次,然后抛出 EOFException

java 字符串比较有趣的bug

java - 模拟随机访问文件

c - 数组元素的地址是否保证递增

c - 将文件路径从数组传递给 fopen 在 C 中失败

c - wait() 系统调用 - child 会忽略它吗?

c - fwrite 和 fread 结构

c - fread 返回 0 并且无法在 Windows 计算机上打开 db 文件。找不到文件吗?或者是权限?