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