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

本文关键字:终止 内存 包含空 复制 c++ | 更新日期: 2023-09-27 18:35:32

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

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

更新

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

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

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

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

但字符*导致"你好";

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

根据这个

函数 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]);
}