c++ - 如何在 mfc 中更正此错误?

标签 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 中更正此错误?

最佳答案

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

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

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

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

关于c++ - 如何在 mfc 中更正此错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37872545/

相关文章:

c++ - 从 char 字符串 c++ 中删除新行

c++ - 理解构造函数初始化列表中带有花括号的奇怪语法

c++ - 以合理的编译时间静态初始化巨大的 uint8_t 数组

c++ - MFC CListBox AddString - 防止自动排序

multithreading - Ccriticalsection 在生产中是否可用?

c++ - 对话框销毁时触发的一般消息/功能?

c++ - 在现有 MFC 应用程序中使用什么 API 来添加 HTTP 客户端支持?

mfc - IMPLMENT_DYNCREATE, "Use MFC in a Static Library"和继承

c++ - 为什么 std::result_of 将(不相关的)函数类型作为类型参数?

c++ - C++ 中的右值引用