如何在c ++中复制包含空终止符的内存块

时间:2014-12-26 18:00:59

标签: c# c++ byte memcpy

我已经在C#中将图像转换为字节数组,并通过TCP将其发送到用C ++编写的服务器应用程序。

现在我想将这个字节数组复制到另一个内存块。我已经尝试了memcpy()函数,但问题是memcpy复制内存块,直到它到达空终止符('\ 0'),并且字节数组包含许多空终止符,我希望它们也被复制了。

更新

为简单起见,我使用以下语句将C#中的字符串“Hello \ 0”World \ 0“转换为字节数组:

string s = "Hello\0"World\0";
byte[] bytes = Encoding.UTF8.GetBytes(s);

我在c ++中的unsigned char *中接收字节并将其复制到另一个char指针,如下所示:

char *chars = new char[12];
memcpy(chars , recvChar, MESSAGE_12);

但是char *会产生“Hello”;

1 个答案:

答案 0 :(得分:1)

根据this

函数memcpy()不检查源中的任何终止空字符 - 它总是复制num字节。你确定它是memcpy吗?

您可以使用类似的东西来打印字符数组(printf终止于NULL字符):

for (int i = 0; i < 12; i++) //12 is the size of chars, I assume
{
    if (chars[i]!=NULL) //if you hit a '\0', ignore it
        printf("%c", chars[i]);
}