2016-06-17 2 views
1

Я использую 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?

ответ

2

Это не ошибка в MFC. Ошибка в вашем коде, что совершенно недействительно. Давайте посмотрим на него внимательно:

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

  1. Использование низкоуровневых копирования памяти процедуры, как memmove со сложными типами данных является надежным доказательством путь к провалу. Класс, такой как CString, может использовать динамическое распределение памяти и непосредственно переопределять его память может вызвать любые проблемы, начиная с утечки памяти и заканчивая немедленным сбоем приложения. Если вы хотите скопировать данные CString по-своему: CString::Insert, CString::Replace, оператор присваивания или конструктор копирования.

  2. memmove Функция принимает два указателя на блоки источника и места назначения. Вместо этого вы пытаетесь передать два экземпляра CString. Конечно, это неверно и никогда не будет проходить проверку типа компилятора. Это example правильного использования memmove.

+0

ОК, большое спасибо! –

+0

Вы правы! Это не ошибка в MFC. Ошибка в моем коде, что совершенно недействительно. Итак, я исправил это так: memmove (testArray + 2, testArray + 3, sizeof (testArray) -2 * sizeof (testArray [0])); –

+0

DONT использует сырые функции с CString – Ajay

Смежные вопросы