2012-01-18 9 views
1
#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; 
} 

ファイルに2つの構造体を書きます。次に、ファイル内の2番目の構造体の先頭にファイルポインタを配置し、そこからfreadを実行して2番目の構造体をzに読み込む必要があります。値はzに正しく読み込まれません。私はどこに問題があるのか​​分からない。fseekの使い方を理解します

答えて

2

"wb"でファイルを開き、バイナリを書きました。書いた後、あなたは同じファイルを読もうとしています。モードを「wb」から「wb +」に変更してください。

+0

ありがとうございました。わかった。 –

+0

@ajaybidari偉大な、私は助けることができてうれしい。あなたが私の答えを受け入れられた答えとしてマークしたいですか? – Carlito

1

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

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

関連する問題