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

在C中使用指针修改结构成员,c,C,我试图以一种非常迂回的方式为结构的一个成员赋值。以下是我正在采取的步骤: 在main中,创建一个结构指针数组 (仍在main中)将指向该数组的指针传递给函数 在函数内部,创建一个结构并将指向该结构的指针添加到数组中 (仍在函数内部)为刚创建的结构的成员赋值 我对C非常陌生,所以我对指针的理解不是很好。我以为这个过程可以让我看到从main分配的值,但当我打印它时,它似乎是空的。我做错了什么(除非是显而易见的——我把这条路弄得太复杂了)? 代码如下: #包括 #包括 结构MyStruct{ 字符名[

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

  • 在main中,创建一个结构指针数组
  • (仍在main中)将指向该数组的指针传递给函数
  • 在函数内部,创建一个结构并将指向该结构的指针添加到数组中
  • (仍在函数内部)为刚创建的结构的成员赋值
  • 我对C非常陌生,所以我对指针的理解不是很好。我以为这个过程可以让我看到从main分配的值,但当我打印它时,它似乎是空的。我做错了什么(除非是显而易见的——我把这条路弄得太复杂了)? 代码如下:

    #包括
    #包括
    结构MyStruct{
    字符名[9];
    };
    void give_name(struct MyStruct**structlist_ptr){
    struct MyStruct new_struct;
    结构列表\u ptr[0]=&new\u结构;
    strcpy(structlist_ptr[0]->名称,“混淆”);
    }
    内部主(空){
    struct MyStruct*struct_list[1];
    给出名称(结构列表);
    printf(“%s\n”,结构列表[0]->name);/*显示为打印随机字符*/
    返回0;
    }
    
    主要问题在于此作业:

    structlist_ptr[0] = &new_struct;
    
    这样,您就可以使
    *structlist\u ptr
    (使用“引用”指针的常用方法)指向本地变量
    新结构


    一旦函数返回,局部变量的生命周期将随着它们超出范围而结束。从某种意义上说,它们将不复存在。这就给你留下了一个错误的、无效的指针。试图取消引用它将导致未定义的行为。

    give_name
    中,您在堆栈上创建了一个临时MyStruct对象,该对象在函数返回后立即失效。现在在main::struct_list[0]中有一个悬空指针,这是未定义的行为,所以任何事情都可能发生。伙计,我真不敢相信我没有想到这一点,非常感谢!在这个更加充实的版本中,我基本上是尝试用函数将新的结构指针附加到数组中。我意识到我可以通过创建新的全局结构来实现这一点,但我对此犹豫不决。我也不想把它从main传递给函数。还有更好的方法吗?我也刚刚意识到我上面提到的任何一种方法都不起作用,因为它总是指向同一个结构。是否有任何方法可以在每次调用函数时向数组添加新结构?@maknel是的,您可以使用它在堆上分配内存。