我正在尝试以一种非常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;
}
答案 0 :(得分:8)
主要问题是此作业:
structlist_ptr[0] = &new_struct;
这样,您就使*structlist_ptr
(使用“引用”指针的常用方式)指向 local 变量new_struct
。
函数返回后,局部变量的生存期将随着它们超出范围而终止。从某种意义上说,它们将不复存在。这就给您留下了一个流浪和无效的指针。尝试取消引用会导致不确定的行为。