gpt4 book ai didi

c++ - 使用 strcpy 抛出 "stack smashing detected"错误

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:15 25 4
gpt4 key购买 nike

我有两种类型的structstruct msgstruct pkt。我的工作是使用作为参数传递的 struct msg 构造一个 struct pkt

struct msg {
char data[20];
};

struct pkt {
int seqnum;
int acknum;
int checksum;
char payload[20];
};

同时

void A_output(struct msg message) { //fails
...
struct pkt snd_pkt;
strcpy(snd_pkt.payload, message.data);
...
}

失败,

void A_output(struct msg message) { //succeeds
...
struct pkt snd_pkt;
memcpy(&snd_pkt.payload, &message, sizeof(struct msg));
...
}

成功。

我不明白的是,如果我将 char[20] 复制到 char[20],并使用 strcpy,应该没问题吧?为什么会抛出 stack smashing 错误?

为什么在工作答案中,它会将类型为struct msg 的内存复制到struct pktchar[20] 字段的内存中>,为什么第三个参数应该是 sizeof(struct msg),而不是 strlen(message.data) + 1?

最佳答案

What I do not understand is, if I am copying char[20] to char[20], and used strcpy, shouldn't it be fine?

如果结构 msg 的数据成员数据以零终止,即如果它包含一个字符串,那就没问题了。似乎错误的原因是它不包含字符串。至于这个说法

memcpy(&snd_pkt.payload, &message, sizeof(struct msg));

然后在一般情况下它具有未定义的行为,因为由于结构对齐结构的大小可以大于 20 个字节,例如当 sizeof( int 等于 8 时。

关于c++ - 使用 strcpy 抛出 "stack smashing detected"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26422893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com