0

私がやりたいのは、「。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はクリアされましたが、この関数が呼び出された場所、たとえばユーザー入力を促すメインメニュー関数の直後には常にエラーが発生します。

助けてください!!前もって感謝します。

4

1 に答える 1

2

「出力は読めないジャンクの山です」-はい、そうなります。これはバイナリ ファイルであり、テキストとして読み取ることを意図したものではありません。

バイナリ情報を読み取り可能な形式で表示したい場合は、16 進ダンプを作成することを検討してください。

これを行う方法については、こちらを参照してください。

于 2012-08-22T06:37:36.787 に答える