我正在使用在Visual Studio 2010中编译的mfc,但遇到以下错误:
error C2664: 'memmove' : cannot convert parameter 1 from 'CString' to 'void *'
我的代码是:
CString testArray[5];
for (int i = 0; i < 5; i++)
{
testArray[i].Format("%d", i*4);
}
memmove(testArray[2], testArray[3], sizeof(testArray)-2*sizeof(testArray[0]));
for (int i = 0; i < 5; i++)
{
MessageBox(testArray[i]);
}
如何在MFC中更正此错误?
最佳答案
这不是MFC中的错误。您的代码中有错误,这完全无效。
让我们仔细看一下:
memmove
这样的低级内存复制例程是确保失败的可靠方法。诸如CString
之类的类可能使用动态内存分配,并且直接覆盖其内存可能会导致任何类型的麻烦,从内存泄漏开始,到应用程序立即失败结束。如果要复制CString
数据,请使用其自己的方法:CString::Insert
,CString::Replace
,赋值运算符或复制构造函数。 memmove
函数采用两个指向源和目标存储块的指针。您正尝试传递两个CString
实例。当然,这是无效的,并且永远不会通过编译器类型检查。这是正确memmove
用法的example。