动态大小的结构 - 学习C艰难的方式Ex17

Tom*_*ill 5 c database struct

我在学习C艰难的方式练习时遇到了麻烦.该练习提供了一个简单的数据库程序,它具有固定的大小和行数.您可以在下面看到构成数据库的结构.

#define MAX_DATA 512
#define MAX_ROWS 100

struct Address {
    int id;
    int set;
    char name[MAX_DATA];
    char email[MAX_DATA];
};

struct Database {
    struct Address rows[MAX_ROWS];
};

struct Connection {
    FILE *file;
    struct Database *db;
};
Run Code Online (Sandbox Code Playgroud)

任务是更改代码以接受MAX_DATA的参数,MAX_ROWS将它们存储在数据库结构中,并将其写入文件,从而创建一个可以任意调整大小的数据库.

我理解如何接受来自用户的MAX_DATA和MAX_ROWS,作为命令行参数 - 在文件中定义的较低的函数中.一旦我有了这些值,我不知道如何将它们存储在数据库结构中并写入文件.

感谢任何能够提供帮助的人.您可以在此处找到其余代码:http://c.learncodethehardway.org/book/ex17.html

Tom*_*ill 5

好的,我终于让这个程序运行起来了,我总结如下。我希望这可以帮助那些也坚持 ex17 的人。

首先,我删除了 MAX_DATA 和 MAX_ROWS 常量并像这样更改了结构:

struct Address {
    int id;
    int set;
    char *name;
    char *email;
};

struct Database {
    int max_data;
    int max_rows;
    struct Address **rows;
};

struct Connection {
    FILE *file;
    struct Database *db;
};
Run Code Online (Sandbox Code Playgroud)

我将max_data和分配max_rows给结构中的新变量,然后将它们写入文件。

conn->db->max_data = max_data;
conn->db->max_rows = max_rows;

int rc = fwrite(&conn->db->max_data, sizeof(int), 1, conn->file);
rc = fwrite(&conn->db->max_rows, sizeof(int), 1, conn->file);
Run Code Online (Sandbox Code Playgroud)

现在我可以运行我的程序,更换MAX_ROWSMAX_DATAconn->db->max_rowsconn->db->max_data

  • 如果我理解正确,` fwrite(conn->db, sizeof(struct Database), 1, conn->file);` 行会为`Address **` 写入两个整数+ 指针。这只是一个地址,因此您不会写入实际数据。 (2认同)