2
#include<stdio.h>
int main(int argc, char **argv){
    FILE *fp = NULL;
    fp = fopen("D://test.txt","wb");
    if(fp == NULL){
        printf("Error opening file\n");
    }

    typedef struct{
        int a;
        char b;
    }A;

    A x = {12, 'a'}, y = {13, 'b'},z;
    fwrite(&x, sizeof(A), 1, fp);
    fwrite(&y, sizeof(A), 1, fp);

    fseek(fp, sizeof(A), SEEK_SET);

    fread(&z, sizeof(A), 1, fp);
    printf("%d  %c\n", z.a, z.b);
    return 0;
}

1つのファイルに2つの構造を書き込むつもりです。次に、ファイルポインターをファイル内の2番目の構造体の先頭に配置し、そこからfreadを実行して、2番目の構造体をzに読み込む必要があります。値がzに正しく読み込まれません。問題がどこにあるのかわかりません。

4

2 に答える 2

3

「wb」でファイルを開き、バイナリを書き込みます。書き込んだ後、同じファイルを読み取ろうとしています。モードを「wb」から「wb+」に変更します。

//fp = fopen("D://test.txt","wb");
fp = fopen("D://test.txt","wb+");

それを機能させるために。

于 2012-01-18T12:39:24.580 に答える
2

エラーを返す可能性のあるすべての呼び出しを常に確認してください。あなたの場合、それfreadはデータを正しく読み取らないことがわかります。Carlitoが言ったように、ファイルから読み取れるように、のモードパラメータを変更する必要がありfopenます。"wb+"そしてperror、単に-の代わりに使用printfすると、有益なエラーメッセージが表示され、標準エラーストリームに送られるため、必要に応じて標準出力ストリームから簡単に分離できます。また、エラーメッセージを出力するだけでなく、エラーが発生したときにプログラムフローを中断する必要があります。

これらのすべての手順を常に自動的に実行する必要があります。戻り値を確認します。正確に何が起こったのかを確認してください。エラーを処理するようにプログラムフローを変更します。これがマントラです。:)

于 2012-01-18T13:57:21.657 に答える