gcc (GCC) 4.7.0
c89
你好,
我有以下结构,我正在尝试 fwrite 和 fread。
但是,因为我的设备和资源是指针。fwrite 将读取指针值而不是数据。我不能为设备或资源使用数组。只有指针,因为它们必须动态分配。
我在写之前为结构元素分配了所有内存。此处未显示,因为我想保持片段简短。也不是自由的。
在我的 fread 函数中,我为设备和资源分配内存,以便 fread 读入这些内存位置。但是,这行不通。
做这个的最好方式是什么?
非常感谢您的任何建议,
struct data {
int id;
int set;
char *device;
char *resource;
};
struct database {
struct data **db_data;
size_t database_rows;
size_t database_data_size;
};
int database_write(FILE *fp, const struct database *db)
{
rewind(fp);
if(fwrite(*db->db_data, sizeof(struct data), 1, fp) == -1) {
return DATABASE_ERROR;
}
return 0;
}
struct database* database_read(FILE *fp, size_t db_rows, size_t db_data_size)
{
struct database *db = NULL;
size_t i = 0;
db = malloc(sizeof(struct database));
db->database_rows = db_rows;
db->database_data_size = db_data_size;
db->db_data = malloc(sizeof(struct data) * db_rows);
for(i = 0; i < db_rows; i++) {
db->db_data[i] = malloc(sizeof(struct data));
db->db_data[i]->device = malloc(db_data_size);
db->db_data[i]->resource = malloc(db_data_size);
}
rewind(fp);
if(fread(*db->db_data, sizeof(struct data), 1, fp) == -1) {
return NULL;
}
return db;
}