我有以下代码,它运作良好:
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) ;
然后检查缓冲区数据,它填充了一些随机垃圾字节
怎么了?
答案 0 :(得分: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`
答案 1 :(得分:2)
BYTE Buffer[256]
创建一个包含256个BYTE
大小元素的数组,无论BYTE
的大小如何。
另一方面,malloc(256)
分配256字节的内存。试试malloc(256 * sizeof(BYTE))
。