c - 动态调整大小的结构 - 学习 C 的艰难之路 Ex17

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

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

我了解如何接受来自用户的 MAX_DATA 和 MAX_ROWS 作为命令行参数 - 在文件下方定义的函数中。获得这些值后,我不确定如何将它们存储在数据库结构中并写入文件。

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

最佳答案

好吧,我终于让这个程序运行起来了,我总结如下。我希望这可能对同样卡在 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;
};

我将 max_datamax_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);

现在我可以运行我的程序并将 MAX_ROWS & MAX_DATA 替换为 conn->db->max_rows & conn-> db->max_data.

关于c - 动态调整大小的结构 - 学习 C 的艰难之路 Ex17,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21269700/

相关文章:

java - 连接到 MySQL 数据库

C++ - 包含数组的 union

c - 变量实例

c - 评论中的 "@(#)"是什么意思?

c - 如何将两个寄存器的 2 的补码值读入一个 int

java - 检查数据库中是否存在表

mysql - 更新和插入查询之间的死锁

c++ - 使用用户输入的数据创建结构数组

C - 将结构序列化为 char* 会更改原始数据

c - 在C中获取字符串的一个特定标记