C 字符串连接使用 memcpy 不追加
C String concatenation using memcpy not appending
在某些网络代码中,我需要在缓冲区中对数据包结构进行编码以通过套接字发送 (2),但是将编码缓冲区 memcpy 到更大的缓冲区中似乎有问题。
这是一个说明我在做什么的小代码示例:
char tbuf[] = "test";
char *buf = malloc(300);
memset(buf, '[=10=]', 300);
int bytes_to_copy = 300;
int bytes_copied = 0;
while (bytes_copied < bytes_to_copy) {
memcpy(buf + bytes_copied, tbuf, sizeof(tbuf));
bytes_copied += sizeof(tbuf);
}
/* free, return */
这应该将 "test" 附加到 buf 中 60 次,但 buf 最终只包含一个 "test"。我是不是用错了memcpy?
您在测试结束时重复复制空终止符。 sizeof tbuf
是 5。
因此所有 C 标准库函数都将忽略所有其他连接符。
解决方法:在memcpy
中少复制一个字节,并确保在最后的字符串中添加一个空终止符。
在某些网络代码中,我需要在缓冲区中对数据包结构进行编码以通过套接字发送 (2),但是将编码缓冲区 memcpy 到更大的缓冲区中似乎有问题。 这是一个说明我在做什么的小代码示例:
char tbuf[] = "test";
char *buf = malloc(300);
memset(buf, '[=10=]', 300);
int bytes_to_copy = 300;
int bytes_copied = 0;
while (bytes_copied < bytes_to_copy) {
memcpy(buf + bytes_copied, tbuf, sizeof(tbuf));
bytes_copied += sizeof(tbuf);
}
/* free, return */
这应该将 "test" 附加到 buf 中 60 次,但 buf 最终只包含一个 "test"。我是不是用错了memcpy?
您在测试结束时重复复制空终止符。 sizeof tbuf
是 5。
因此所有 C 标准库函数都将忽略所有其他连接符。
解决方法:在memcpy
中少复制一个字节,并确保在最后的字符串中添加一个空终止符。