gpt4 book ai didi

c - 在 C 中用指针修改结构成员

转载 作者:行者123 更新时间:2023-12-02 06:46:58 24 4
gpt4 key购买 nike

我试图以一种非常迂回的方式为结构的成员赋值。以下是我正在采取的步骤:

  1. 在 main 中,创建一个结构指针数组。
  2. (仍在 main 中)将指向该数组的指针传递给函数。
  3. 在函数内部,创建一个结构并将指向它的指针添加到数组。
  4. (仍在函数内部)为刚创建的结构的成员赋值。

我是 C 的新手,所以我对指针不是很了解。我认为这个过程可以让我看到从 main 分配的值,但是当我打印它时它似乎是空的。我做错了什么(除非显而易见 - 我让这种方式太复杂了)?这是代码:

#include <stdio.h>
#include <string.h>

struct MyStruct {
char name[9];
};

void give_name(struct MyStruct ** structlist_ptr) {
struct MyStruct new_struct;
structlist_ptr[0] = &new_struct;
strcpy(structlist_ptr[0]->name, "confused");
}

int main(void) {
struct MyStruct * struct_list[1];

give_name(struct_list);
printf("%s\n", struct_list[0]->name); /* Appears to print random characters */

return 0;
}

最佳答案

主要问题是这个作业:

structlist_ptr[0] = &new_struct;

通过它,您可以使 *structlist_ptr(使用“引用”指针的常用方法)指向local 变量 new_struct

一旦函数返回,局部变量的生命周期将结束,因为它们超出了作用域。从某种意义上说,它们将不复存在。这给您留下了一个杂散且无效的指针。尝试取消引用它会导致未定义的行为

关于c - 在 C 中用指针修改结构成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57001348/

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