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中少复制一个字节,并确保在最后的字符串中添加一个空终止符。