繁体   English   中英

使用 memcpy 不附加的 C 字符串连接

[英]C String concatenation using memcpy not appending

在某些网络代码中,我需要在缓冲区中对数据包结构进行编码以通过套接字发送(2),但是将编码的缓冲区存储到更大的缓冲区中似乎有问题。 这是一个小代码示例,说明了我在做什么:

char    tbuf[] = "test";
char    *buf = malloc(300);
memset(buf, '\0', 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少复制一个字节,并确保在最终字符串中添加一个空终止符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM