尽管非空文件fread缓冲区为空白

问题描述:

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

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相当陌生,所以我确信这只是我错过的简单东西。

感谢您的帮助。 :)

+2

未定义行为:您的缓冲区为255个字节,但是你看256。 – Olaf

因为不能输出与"%s"printf()二进制数据。如果你想看到的内容,你可以写一个循环,并打印每个字节的十六进制值,这样

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