2012-08-22 81 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,我的代码是否正确? –