2017-06-01 47 views
0

所以我节省多少有些复杂的结构成一个bin文件如下:如何复制我在同一代码中创建的完全相同的结构?

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”是,在年底取代了我在读“baseda”该文件的文件。

的结构是这样的:

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); 

的事情是,正似乎并没有越来越值我存储在第一个地方的温度。

感谢您花时间阅读本文。

+0

@WhozCraig我试图再次读取它之前关闭该文件。 –

+0

你怎么知道“我首先存储的ca的价值”实际上是事实?根本没有你的IO调用被检查。冲洗/关闭之后,您是否对文件进行了hexdump转储? (你在打开基础文件之前冲洗和/或关闭它,是不是?)。此代码需要[最小,完整,可验证的示例](https://stackoverflow.com/help/mcve)重现了我们目前没有的问题。 – WhozCraig

回答

1

你写使用“写()” - 尝试“FWRITE()”

+0

对不起,这是我做格式化的一个错误,在我使用fwrite的实际代码中。 –

相关问题