gpt4 book ai didi

c - 传递结构体指针

转载 作者:行者123 更新时间:2023-11-30 20:31:28 24 4
gpt4 key购买 nike

我有这样的代码

main.c

....
....
struct dta
{
int id;
char *val;
};
....
....
int main(void)
{
struct dta *dt = malloc(sizeof(*dt));
dt->id=8;
dt->val=strdup("123456qwerty");

foo1(dt);

free(.........);
free(.........);

return 0;

}

void foo1(struct dta *dt)
{
foo2(dt);
}

void foo2(struct dta *dt)
{
foo3(dt);
}

void foo3(struct dta *dt)
{
free(dt->val);
dt->val=strdup("asdfg123456");
dt->id=18;
bar(dt);
}

void bar(struct dta *dt)
{
printf("id = %d\n", dt->id);
printf("val = %s\n", dt->val);
}

我不知道该怎么办,我刚学了c语言。我想将main()中创建的数据dt->*显示到bar()中。首先,我有来自 main 的 dt->* ,我调用并将 dt->* 传递给 foo1(),foo1() 调用 foo2() 并将 dt->* 传递给 foo3()。我想从 bar() 打印 dt->* 。请有人帮助我。问题是 foo3() 无法更新 main() 上的 dt->*。

最佳答案

函数声明的顺序不正确。 main 函数依赖于 foofoo 依赖于 bar。因此,您应该按以下方式重写它

#include <malloc.h>  // for malloc and free
#include <stdio.h> // for printf
#include <string.h> // for strdup

struct dta
{
int id;
char* val;
};

void bar(struct dta* dt)
{
printf("id = %d\n", dt->id);
printf("val = %s\n", dt->val);
}

void foo(struct dta* dt)
{
bar(dt);
}

int main()
{
struct dta* dt = (struct dta*) malloc(sizeof(struct dta));
dt->id = 8;
dt->val = strdup("123456qwerty");

foo(dt);

// Free allocated memory
free(dt->val);
free(dt);

return 0;
}

关于c - 传递结构体指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50779707/

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