-3

バイナリ ファイル (読み取り用に開く必要があるファイル) が次の関数プロトタイプで記述されているとします。

void writeBinaryFile ( char *fileName , char *comment , int numberOfDoubles , double *doubles , int numberOfInts , int *ints )

(この機能の詳細については、以下のペーストを参照してください)

...

私の書いたコードは、.bin ファイルの最初の文字しか取得しません...

これが私の機能です:

void readBinaryFile(char *fileName)
{
        FILE *fp;
        char *ptr;
        double *ptr1;
        int *ptr2;
        ptr=(char*)malloc(sizeof(char)*5);
        ptr1=(double*)malloc(sizeof(double)*6);
        ptr2=(int*)malloc(sizeof(int)*6);

        fp=fopen ( fileName , "rb" ) ;
        fread(ptr,sizeof(char),11,fp);
        while(*ptr!='\0')
        {
            printf("%c",*ptr);
            ptr++;

        }
        fclose(fp);
}

ここで何が欠けていますか?.bin ファイルの最初の文字以上のものを読み取る必要があります。

いつものように、助けていただければ幸いです。ありがとう!

組織化された方法で完全なコードが必要な場合は、ここに貼り付けます。

http://pastebin.com/66jZwfUD

4

1 に答える 1

5
void readBinaryFile(char *fileName)
{
    FILE *fp;
    char *ptr;
    double *ptr1;
    int *ptr2;

    ptr=(char*)malloc(sizeof(char)*5);
    ptr1=(double*)malloc(sizeof(double)*6);
    ptr2=(int*)malloc(sizeof(int)*6);

の戻り値をCでキャストしないでくださいmalloc。エラーが非表示になります。

    fp=fopen ( fileName , "rb" ) ;

ここでエラーをチェックする必要があります。

    fread(ptr,sizeof(char),11,fp);

に5バイトを割り当てましたがptr、今は11を読んでいます。また、の戻り値を確認する必要がありfreadます。

    while(*ptr!='\0')
    {
        printf("%c",*ptr);
        ptr++;

    }

このループが割り当てられたスペースの終わりから実行されるのを防ぐものは何もありません。

    fclose(fp);
}

これで、割り当てたすべてのメモリがリークされ、戻ったときにポインタがスコープ外になるため、そこに読み込んだすべてのデータが失われます。

于 2012-12-09T04:19:26.143 に答える