2017-06-01 4 views
0

は、だから私は、次のようにbinファイルにやや複雑な構造を保存:最後に、私は「baseda」を読み込むファイルを置き換えるファイルであることファイル内に作成したのと同じコードを同じコードでコピーするにはどうすればよいですか?

fwrite(&ca, sizeof(ca), 1, tempor); 
for(i=0; i<ca; i++){ 
    fwrite(&alunue[i].ndp, sizeof(int), 1, tempor); 
    for(j=0; j<alunue[i].ndp; j++){ 
     fwrite(&alunue[i].peract[j].ndu, sizeof(int), 1, tempor); 
    } 
} 
fwrite(alunue, sizeof(alumno), ca, tempor); 

「tempor」。

構造は次のようになります。

typedef struct name{ 
    char n[125]; 
} name; 

typedef struct uda{ 
    name nomuda; 
    name clave; 
    float calif; 
} uda; 

typedef struct periodo{ 
    int ndu; 
    name nomper; 
    uda *uniapr; 
} periodo; 

typedef struct alumno{ 
    int nua, ndp; 
    name n, ap, am; 
    periodo *peract; 
    struct alumno *a, *s; 
} alumno; 

と私はそれがこのようになります読み取るために使用したコード:

fread(&n, sizeof(int), 1, baseda); 
alunue = malloc(n*sizeof(alumno)); 
for (i = 0; i < n; i++) { 
    fread(&m, sizeof(int), 1, baseda); 
    alunue[i].peract = malloc(m*sizeof(periodo)); 
    for (j = 0; j < m; j++) { 
      fread(&o, sizeof(int), 1, baseda); 
      alunue[i].peract[j].uniapr = malloc(sizeof(uda)); 
    } 
} 
fread(alunue, sizeof(alumno), n, baseda); 

ものであり、nは値を取得していないようです私が一時的に最初に保管したcaの

ありがとうございました。

あなたが使用して書き込み
+0

@WhozCraigを試してみてください。 –

+0

「私が最初に保管したcaの価値」は、実際には事実です。あなたのIOコールはまったくチェックされません。あなたはそれをフラッシュ/クローズした後にファイルをヘキサダンプしましたか? (あなたは、あなたがbasaを開く前に、それを洗い流したり閉じたりしましたか?)。このコードは、現在のところ持っていない問題を再現する[最小限で完全な、検証可能な例](https://stackoverflow.com/help/mcve)を求めています。 – WhozCraig

答えて

1

「(書き込みを)」 - 私は再びそれを読み取ろうとする前に、ファイルを閉じてやる「fwriteの()」

+0

申し訳ありませんが、私が実際に行った書式設定のタイプミスです。実際のコードでは、fwriteを使用しています。 –

関連する問題