我想要做的是讀取'.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函數。
請幫忙!!提前致謝。
除非二進制文件的內容是一個可讀的ASCII字符集,否則通過'%s'' printf()'格式將內容發送到'stdout'通常會導致一堆垃圾不可讀。文件中實際是什麼? –
你還會期望什麼 - 你自己說這個文件是二進制的,爲什麼它會產生可讀的輸出? – mathematician1975
是否有你打開文件兩次的原因? –