gpt4 book ai didi

c - 访问嵌套结构

转载 作者:行者123 更新时间:2023-11-30 16:56:15 27 4
gpt4 key购买 nike

我在访问dog中包含的checkups结构时遇到一些问题。由于狗包含在包含中,我假设我只会指向容器中狗的检查,但这似乎在尝试添加检查日期或替换检查日期时导致错误。

    // used to create a linked list of containers, each contaning a "dog"
struct container {
struct dog *dog;
struct container *next;
} *list = NULL;

// used to hold dog information and linked list of "checkups"
struct dog {
char name[30];
char breed[30];
struct checkup *checkups;
};

// used to create a linked list of checkups containing "dates"
struct checkup {
char date[30];
struct checkup *next;
};

这是我尝试向检查添加新日期的代码,但是当它尝试将其添加到我的程序时崩溃了。任何关于为什么会发生这种情况的指示将不胜感激。

    void add_checkup(char* name, char* date)
{
struct container *tempList = list;
struct checkup *tempCheck = (struct checkup *) malloc(sizeof(struct checkup));
while (tempList != NULL) {

if (strcmp(tempList->dog->name, name) == 0) {

strcpy(tempCheck->date, date);
strcpy(tempList->dog->checkups, tempCheck);
}

tempList->next;
}


}

最佳答案

为什么使用strcpy()来设置struct checkup *的值?它试图将源指针指向的数据复制到假定目标指针指向的数组,而事实上我没有看到任何特殊的理由来假设目标指针甚至是有效的。当然,没有理由假设源数据具有以 null 结尾的 char 数组的形式,因此您的原始代码在这里严重错误。

简单的赋值更有可能是正确的:

tempList->dog->checkups = tempCheck;

但是请注意,这会带来严重的内存泄漏风险,因为 tempList->dog->checkups 的先前值会丢失。另请注意,它与函数名称的 add_ 部分隐含的行为不匹配 - 它更像 set_。如果您希望能够对每只狗进行多次检查,那么您需要做更多的工作。

关于c - 访问嵌套结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39967416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com