私の質問は簡単なものである構造体「C」の配列のサイズを大きく:動的に私は、次の構造体を宣言した...
struct Address {
int id;
int set;
char *name;
char *email;
};
struct Database {
struct Address rows[512];
};
struct Connection {
FILE *file;
struct Database *db;
};
は今、私は私の「接続内の私の「データベース」という明確な初期化しましたいくつかのダミーのアドレスを持っています。私はこの後、データベースを取り、と私の「接続」のstruct内のファイルに保存します。私のアドレスは512をIE用、私は私の「データベース」構造体の内側の行の所定数を持っているとき、すべてが素晴らしい作品
void Database_write(struct Connection *conn){
rewind(conn->file);
int rc = fwrite(conn->db, sizeof(struct Database), 1, conn->file);
if(rc != 1){
die("Failed to write database.\n",conn);
}
rc = fflush(conn->file);
if(rc == -1){
die("Cannot flush database.\n",conn);
}
しかし、行の数を動的にしたいのですが?おそらく関数に渡されたパラメータとしての?今問題があることを、MAX_ROWSが関数に渡されたのparamされた状態で
conn->db->rows = (struct Address*) malloc(sizeof(struct Address)*max_rows);
:しかし、私は...以下を使用して
struct Database {
struct Address *rows;
};
とし、このポインタにスペースを割り当てるを試してみました私が行って、これを私の "Connection"構造体内のファイルに保存しようとすると、ポインタ "struct Address * rows;"を保存するだけですスペースが割り当てられたデータではありません。どのようにこの割り当てられた領域を保存するか、または構造体の中にあらかじめ決められた配列を持っていて、それを動的に成長させるための提案はありますか?
ありがとうございます!
あなたの新しく更新された書き込みコードは動作しません。 –
あなたはポインタを保存する必要がありますか?構造体をバイトとしてファイルにダンプするだけでしたか?それはひどい考えです。そのファイルは、マシンのサブセット上で正しく読み取られることになります。必要なのは、プロセスのメモリにあるようにダンプバイトだけでなく、データの論理表現をファイルに書き出すことです。 – StoryTeller
構造体を解析するシリアル化ルーチンを書く必要があります。 – Lundin