2016-06-17 51 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實例。當然,這是無效的,永遠不會通過編譯器類型檢查。這是正確的memmove用法的example

+0

好的,非常感謝! –

+0

你是對的!這在MFC中不是錯誤。 錯誤是在我的代碼中,這是完全無效的。因此,我已經這樣糾正它: memmove(testArray + 2,testArray + 3,sizeof(testArray)-2 * sizeof(testArray [0])); –

+0

不要使用CString的原始函數 – Ajay