如何在MFC中纠正此错误

How can I correct this error in mfc?

本文关键字:错误 MFC      更新时间:2023-10-16

我正在使用我在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(testarray [2],testarray [3],, sizeof(testarray)-2*sizeof(testArray [0]));

  1. 使用复杂数据类型(例如memmove)使用低级内存复制例程是失败的确定方法。像CString这样的类可以使用动态内存分配,直接覆盖其内存可能会导致任何类型的麻烦,从内存泄漏开始,并立即以应用程序失败结束。如果要复制CString数据,请使用自己的方法:CString::InsertCString::Replace,分配操作员或复制构造函数。

  2. memmove功能将两个指针带到源和目标内存块。您正在尝试通过两个CString实例。当然,这是无效的,永远不会通过编译器类型检查。这是正确的memmove用法的一个示例。