【发布时间】: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