我正在尝试以一种非常about回的方式将值分配给结构的成员。这是我正在采取的步骤:
我是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)
主要问题是此分配:
structlist_ptr[0] = &new_struct;
Run Code Online (Sandbox Code Playgroud)
这样,您*structlist_ptr(使用“引用”指针的常用方法)就指向了局部变量new_struct。
函数返回后,局部变量的生存期将超出范围。从某种意义上说,它们将不复存在。这就给您留下了一个流浪和无效的指针。尝试取消引用将导致不确定的行为。