C++记忆到错位的记忆

C++ memcpy to a malloc'ed memory

本文关键字:记忆 错位 C++      更新时间:2023-10-16


我有以下代码,它运行良好:

int Size ;
CString Message ;
BYTE Buffer[256] ;
Message = _T("Some Text") ;
Size = Message.GetLength() * sizeof(WCHAR) ;
memcpy(Buffer,&Message,Size) ;

但当我把它改成这个:

int Size ;
CString Message ;
BYTE* Buffer ;
Buffer = (BYTE*) malloc(256) ;
Message = _T("Some Text") ;
Size = Message.GetLength() * sizeof(WCHAR) ;
memcpy(Buffer,&Message,Size) ;

然后检查缓冲区数据,它填充了一些随机垃圾字节

怎么了?

CString不是POD类型,不能按位复制。

看来你必须将范例从C转换到C++

从文件上看http://msdn.microsoft.com/en-us/library/aa300569(v=vs.60).aspx支持转换:

LPCTSTR raw = (LPCTSTR) Message;
// now memcpy from `raw`

BYTE Buffer[256]创建一个由256个BYTE大小的元素组成的数组,而不考虑BYTE的大小。CCD_ 4则分配256字节的存储器。尝试malloc(256 * sizeof(BYTE))