使用fread函数读取二进制文件时出现问题

时间:2012-08-22 06:33:20

标签: c stdin fread

我想要做的是读取'.d'二进制文件的内容并将它们存储在一个数组中。 所以我写了以下代码:

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;
}

编译器报告没有错误,但不知何故,函数调用似乎没有完全按照我想要的方式工作。它确实清除了stdin,但是在调用此函数的地方总会出现错误,例如,mainmenu函数提示用户输入。

请帮忙!!提前谢谢。

1 个答案:

答案 0 :(得分:2)

“输出是一堆难以理解的垃圾” - 是的,它。它是一个二进制文件,它不应该像文本一样可读。

如果您想以可读的形式查看二进制信息,请考虑对其执行十六进制转储。

有关实现此目的的方法,请参阅here