gpt4 book ai didi

C - strcpy 似乎连接存储在结构中的连续值

转载 作者:行者123 更新时间:2023-11-30 15:27:20 25 4
gpt4 key购买 nike

我已经有一段时间没有使用 C 了,并且在我的代码中发现了一些问题。我有一个这样的结构:

struct packet
{
char seq[4];
char type[4];
char src[10];
char dst[10];
char payload[MAX_BUF_LEN]; //predefined buffer length constant
}

然后,当接收到一串由空格分隔的字符时,我想将每个“字段”复制到相应的struct packet变量中。这是我所拥有的:

strcpy(temp_buf, buf);
field=strtok(temp_buf, " ");

temp_buf 中的示例字符串:“1 send 8273940124 9472849351 hello”

strcpy(inet_packet.seq, field);
field=strtok(NULL, " ");
strcpy(inet_packet.type, field);
field=strtok(NULL, " ");
strcpy(inet_packet.src, field);
field=strtok(NULL, " ");
strcpy(inet_packet.dst, field);
field=strtok(NULL, "\n");
printf("field: %s\n", field); //Shows field="hello"
strcpy(inet_packet.payload, field);

但是,在上面的示例输入中,inet_packet.type = send82739501249472849351hello所以;它似乎将每个连续的副本连接成类型?尝试了几种不同的方法,但仍然无法获得预期的输出。

最佳答案

C 字符串必须以 NUL 结尾。因此,您的声明 char type[4] 不够大,无法容纳字符串 send 而不会溢出。

将此声明更改为 char type[5] 并确保您在其中放置长度超过 4 个字符的字符串。

关于C - strcpy 似乎连接存储在结构中的连续值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27052023/

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