1


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

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) ;

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

怎么了 ?

4

2 回答 2

4

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

看来您必须将范例从 C 切换到 C++

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

LPCTSTR raw = (LPCTSTR) Message;
// now memcpy from `raw`
于 2013-08-04T14:53:50.993 回答
2

BYTE Buffer[256]创建一个由 256 个大小的元素组成的数组BYTE,而不管BYTE' 的大小。 malloc(256)另一方面分配 256 字节的内存。试试malloc(256 * sizeof(BYTE))

于 2013-08-04T14:55:06.607 回答