【问题标题】:using strcpy to copy a string to a member of a structure via the pointer operator使用 strcpy 通过指针运算符将字符串复制到结构的成员
【发布时间】:2017-09-12 15:32:13
【问题描述】:

我正在尝试使用 strcpy 为作为结构成员的 char 数组设置值。如果可能,我想使用指针运算符来执行此操作。

struct my_struct{
  char foo[15];
} *a_struct_Ptr;

int main(){
  strcpy(a_struct_Ptr -> foo, "test");
return 0;
}

我可以编译这段代码,但是当我运行它时,我遇到了分段错误。

如果我不将结构定义为指针,它似乎也可以正常工作,例如以下代码可以正常工作...

struct my_struct{
  char foo[15];
}a_struct;

int main(){
  strcpy(a_struct.foo, "test");
  return 0;
}

我希望能够用指针来做到这一点。 任何反馈表示赞赏。谢谢

【问题讨论】:

  • 因为你没有指向任何东西。你需要为它分配内存。
  • a_struct_Ptr 没有指向任何东西;它持有 NULL 所以你的代码很可能会崩溃。为结构分配足够的空间,您将有机会进入。
  • 看起来您需要将结构定义为变量并为该结构分配一些内存。例如: struct *my_struct = malloc(sizeof(struct my_struct));可能。
  • 谢谢,不过还有一个问题……这是否意味着通过显式定义结构,编译器将自动处理结构中定义的所有必要空间的分配?
  • @MattHall - 是的,通过定义一个结构变量(与结构指针相比),内存将自动分配到堆栈上(如果它是一个全局变量,它将以不同的方式分配,但仍然是自动)。

标签: c string pointers struct strcpy


【解决方案1】:

许多人评论的问题是我没有为指向我的结构的指针分配内存。

通过在我的 strcpy 语句前面加上

a_struct_Ptr = (struct my_struct *) malloc(sizeof(struct my_struct));

我能够成功地将字符串文字复制到 my_struct 的 char 数组成员。

作为一种好的做法,我在使用完结构后添加了free(a_struct_Ptr);

【讨论】:

  • 我可能会在free 中添加提及,以便 OP 知道在不再需要内存时释放内存。
  • 很高兴这有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 2013-12-26
  • 2023-03-31
  • 2011-11-01
  • 2010-09-27
  • 1970-01-01
相关资源
最近更新 更多