如何在mfc中更正此错误?

时间:2016-06-17 03:18:45

标签: c++ mfc

我正在使用我在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中的错误?

1 个答案:

答案 0 :(得分:2)

这不是MFC中的错误。错误在您的代码中,完全无效。 让我们仔细看看:

  

memmove(testArray [2],testArray [3],   的sizeof(testArray)-2 *的sizeof(testArray [0]));

  1. memmove等低级内存复制例程与复杂数据类型结合使用,是确保失败的可靠方法。像CString这样的类可以使用动态内存分配,直接覆盖其内存可能会导致任何类型的麻烦,从内存泄漏开始到应用程序立即失败。如果您要复制CString数据,请使用自己的方法:CString::InsertCString::Replace,赋值运算符或复制构造函数。

  2. memmove函数有两个指向源和目标内存块的指针。您正尝试传递两个CString实例。当然这是无效的,永远不会通过编译器类型检查。这是正确memmove用法的example