【发布时间】:2022-01-14 18:00:24
【问题描述】:
我浏览了类似的主题,但没有找到解决问题的方法。我有一个类似
的结构typedef struct {
int number;
char *string;
} mystruct;
//Then define a pointer to the struct:
mystruct *data;
// Allocate memory:
data = malloc(sizeof(mystruct));
//Assign some number, let's say 5:
(*data).number = 5;
//So far ok, works (checked: 5 can be retrieved from the struct somewhere else) but:
strcpy((*data).string = "Hello!");
//This line fails with segmentation fault.
我不明白为什么?有人可以解释一下我做错了什么吗?
【问题讨论】:
-
因为成员
char *string;也需要分配内存来复制字符串。但是你可以通过data->string = "Hello!"来分配指针。 -
strcpy()需要两个参数。 -
当您编写问题时,请使用编辑器中的正确工具将文本格式化为代码。插入 HTML 换行符比突出代码并按下
{}按钮要费力得多。而后者实际上会产生一些不会灼伤我们眼睛的东西。 -
顺便说一句,我们通常写
pointer->member而不是(*pointer).member -
我怀疑你实际上写了
strcpy((*data).string, "Hello!");,否则它甚至不会编译。在这种情况下,请参阅@WeatherVane 的评论。