用C中的指针修改结构成员

mak*_*nel 2 c

我正在尝试以一种非常about回的方式将值分配给结构的成员。这是我正在采取的步骤:

  1. 首先,创建一个结构指针数组。
  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;
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 8

主要问题是此分配:

structlist_ptr[0] = &new_struct;
Run Code Online (Sandbox Code Playgroud)

这样,您*structlist_ptr(使用“引用”指针的常用方法)就指向了局部变量new_struct

函数返回后,局部变量的生存期将超出范围。从某种意义上说,它们将不复存在。这就给您留下了一个流浪和无效的指针。尝试取消引用将导致不确定的行为