C-strcpy似乎在连接存储在结构中的连续值
我已经有一段时间没有使用C语言了,我在代码中发现了一些问题。我有这样一个结构:C-strcpy似乎在连接存储在结构中的连续值,c,struct,strcpy,C,Struct,Strcpy,我已经有一段时间没有使用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_b
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\u buf
中的字符串示例:“1发送8273940124 9472849351 hello”
但是,在上面的示例输入中,inet\u packet.type
=send82739501249472849351hello
所以它似乎在将每个连续副本连接到类型中?尝试了几种不同的方法,但仍然无法获得预期的输出。C字符串必须以NUL结尾。因此,您的声明
char-type[4]
不够大,无法容纳字符串send
,而不会溢出
将此声明更改为
char-type[5]
,并确保您在其中放置的字符串长度不超过4个字符。为了便于其他人帮助您,请编写并发布一份您编写的声明,说明您尝试了几种不同的方法。请发布您尝试的所有内容(使用完整的源代码)、您收到的输出以及为什么它对您不好。我不确定这是否与您遇到的问题有关,但我注意到您的三个结构成员(type、src和dest)不够大,无法同时包含您提供的字符串和空终止符。这就解决了问题。对于根本问题是什么的意外行为,我认为如果这是一个问题,字符串将在最后被截断,但很高兴知道。谢谢。@user2950936:是的strcpy()
不是很聪明,很乐意覆盖目标缓冲区的末尾。
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);