Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-strcpy似乎在连接存储在结构中的连续值_C_Struct_Strcpy - Fatal编程技术网

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

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

我已经有一段时间没有使用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\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);