2012-08-22 86 views
0

我想要做的是讀取'.d'二進制文件的內容並將它們存儲在數組中。 所以我寫了下面的代碼:使用fread函數讀取二進制文件的問題

void viewFile() 
{ 
    unsigned char inFileData[SIZE]; 
    char fileName[SIZE]; 
    int numRead; 

    FILE *inBinFile; 


    printf("Enter the file name:"); 
    scanf("%s", fileName); 

    inBinFile = fopen(fileName, "rb"); 
     if((inBinFile = fopen(fileName, "rb")) == NULL) 
     { 
      fprintf(stderr, "Error opening %s\n", fileName); 
      clearStdin();/*a function to clear stdin*/ 
      mainMenu();/*a function to prompt user input*/ 
     } 
    numRead = fread(inFileData, sizeof(unsigned char), SIZE, inBinFile); 
    inFileData[SIZE] = '\0'; 

    printf("U coded data:\n%s\n", inFileData); 
    printf("%d\n", numRead); 

    fclose(inBinFile); 
    return; 
} 

輸出是垃圾的不可讀一堆。我做錯了哪一部分?我不明白。

也,我下面寫我clearStdin功能:

void clearStdin(void) 
{ 
    scanf("%*[^\n]"); 
    scanf("%*1[\n]"); 
    return; 
} 

編譯報道沒有錯誤,但不知何故,函數調用似乎並沒有工作,正是我想要的方式。它確實清除了標準輸入,但是在調用這個函數的地方總會出現錯誤,例如提示用戶輸入的mainmenu函數。

請幫忙!!提前致謝。

+1

除非二進制文件的內容是一個可讀的ASCII字符集,否則通過'%s'' printf()'格式將內容發送到'stdout'通常會導致一堆垃圾不可讀。文件中實際是什麼? –

+0

你還會期望什麼 - 你自己說這個文件是二進制的,爲什麼它會產生可讀的輸出? – mathematician1975

+0

是否有你打開文件兩次的原因? –

回答

2

「輸出是一堆不可讀的垃圾」 - 是的,它是。這是一個二進制文件,它並不意味着作爲文本可讀。

如果您想以可讀形式查看二進制信息,請考慮對其執行十六進制轉儲。

請參閱here以獲得此方法。

+0

非常感謝!但是OTOH,我的代碼是否正確? –