2016-11-25 81 views
0

我試圖從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

回答

2

因爲不能輸出與"%s"printf()二進制數據。如果你想看到的內容,你可以寫一個循環,並打印每個字節的十六進制值,這樣

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