Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用strcpy通过指针运算符将字符串复制到结构的成员_C_String_Pointers_Struct_Strcpy - Fatal编程技术网

使用strcpy通过指针运算符将字符串复制到结构的成员

使用strcpy通过指针运算符将字符串复制到结构的成员,c,string,pointers,struct,strcpy,C,String,Pointers,Struct,Strcpy,我试图使用strcpy为作为结构成员的char数组设置值。如果可能的话,我想使用指针操作符来实现这一点 struct my_struct{ char foo[15]; } *a_struct_Ptr; int main(){ strcpy(a_struct_Ptr -> foo, "test"); return 0; } 我可以编译这段代码,但当我运行它时,我会遇到一个分段错误 此外,如果我不将结构定义为指针,它似乎也可以正常工作,例如,下面的代码可以正常工作 struct m

我试图使用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;
}
不过我希望能够用指针来实现这一点。
任何反馈都将不胜感激。谢谢

正如许多人评论的那样,问题在于我没有为指向我的结构的指针分配内存

在我的strcpy语句前面加上

a_struct_Ptr = (struct my_struct *) malloc(sizeof(struct my_struct));
我能够成功地将字符串文本复制到我的_结构的char数组成员


作为良好的实践,我添加了
free(a_struct_Ptr)在使用完结构之后。

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

在我的strcpy语句前面加上

a_struct_Ptr = (struct my_struct *) malloc(sizeof(struct my_struct));
我能够成功地将字符串文本复制到我的_结构的char数组成员


作为良好的实践,我添加了
free(a_struct_Ptr)在结构完成后使用。

因为您没有指向任何内容。你需要为它分配内存。
a_struct_Ptr
不指向任何东西;它保持空值,因此您的代码很可能会崩溃。为结构分配足够的空间,您就有机会了。看起来您需要将结构定义为变量,并为该结构分配一些内存。例如:struct*my_struct=malloc(sizeof(struct my_struct));可能吧。谢谢,还有一个问题。。。这是否意味着通过显式定义结构,编译器将自动处理分配结构中定义的所有必要空间?@MattHall-是的,通过定义结构变量(相对于结构指针),内存将自动分配到堆栈上(如果是全局变量,将以不同方式分配,但仍然自动分配)。因为你没有指向任何东西。你需要为它分配内存。
a_struct_Ptr
不指向任何东西;它包含NULL,因此你的代码很可能会崩溃。为结构分配足够的空间,你就有机会了。看起来你需要将结构定义为变量,并为该结构分配一些内存。例如:struct*my_struct=malloc(sizeof(struct my_struct));可能。谢谢,还有一个问题……这是否意味着通过显式定义结构,编译器将自动处理分配结构中定义的所有必要空间?@MattHall-是的,通过定义结构变量(相对于结构指针),则会在堆栈上自动分配内存(如果是全局变量,则会以不同方式分配,但仍会自动分配)。我可能会在
free
中添加一个选项,以便OP知道在不再需要时释放内存。很高兴这有帮助!我可能会在
free
中添加一个选项,以便OP知道在不再需要时释放内存。很高兴这有帮助!