memcpy只在c++上复制一个字节

memcpy only copying one byte over c++

本文关键字:一个 字节 只在 c++ 复制 memcpy      更新时间:2023-10-16

我正试图使用memcpy将TCHAR数组转换为BYTE数组,但memcpy函数只将1个TCHAR从TCHAR数组复制到字节数组中。

我不知道为什么会发生这种事。

这是一个代码片段。

TCHAR test[] = L"This is a test string, its purpose is to do some testing!";
DWORD testSizeBytes = sizeof(TCHAR) * lstrlen(test);
LPBYTE byteArray = new BYTE[testSizeBytes+1];
memcpy(byteArray,test,testSizeBytes);

如果我使用这个片段,字节数组将只包含"T";

如有任何帮助,我们将不胜感激。

编辑:我解决了这个问题(这是一个打字错误)。我在这里写的代码工作得很完美。我的编译器在windows虚拟机中,所以我不得不在这里重新键入它,并在不知不觉中修复了拼写错误。

TCHAR test[] = L"This is a test string, its purpose is to do some testing!";

这是一个宽字符(wchar_t)字符串。在Windows上,定义了UNICODE,即UTF-16。在UTF-16中,字符'T'是2个字节。第一个字节对应于'T'的ASCII值(十进制84)。第二个字节是0。因此,当您将其复制到字节数组时,它看起来像是一个以null结尾、包含1个字符的c字符串。其他字符在那里,但它们出现在明显的c字符串的末尾,所以调试器显然忽略了它们。

正如ajshort的注释所提到的,调试器可能没有意识到您正在处理一个数组。

如果您可以使用调试器查看内存,请尝试查看内存位置byteArray + 1byteArray + 2等。

我不在Windows上,所以我不能告诉你如何执行,但等效的gdb命令是x byteArray + 1