2016-06-17 15 views
1

Ich verwende mfc, die ich in Visual Studio 2010 erstellt, und ich die folgende Fehlermeldung erhalten:Wie kann ich diesen Fehler in MFC beheben?

error C2664: 'memmove' : cannot convert parameter 1 from 'CString' to 'void *' 

Mein Code ist:

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]); 
} 

Wie kann ich diesen Fehler in mfc korrekt?

Antwort

2

Dies ist kein Fehler in der MFC. Der Fehler ist in Ihrem Code, der vollständig ungültig ist. Läßt es betrachtet sorgfältig:

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

  1. Low-Level-Speicherkopierroutinen wie memmove mit den komplexen Datentypen ist ein sicherer Beweis Weg zum Scheitern. Eine Klasse wie CString kann eine dynamische Speicherzuweisung verwenden, und das direkte Überschreiben ihres Speichers kann jede Art von Problemen verursachen, beginnend mit dem Speicherleck und endet mit einem sofortigen Anwendungsfehler. Wenn Sie CString Daten kopieren möchten, verwenden Sie eigene Methoden: CString::Insert, CString::Replace, Zuweisungsoperator oder Kopierkonstruktor.

  2. memmove Funktion nimmt zwei Zeiger auf die Quell- und Zielspeicherblöcke. Sie versuchen, zwei Instanzen CString stattdessen zu übergeben. Natürlich ist das ungültig und würde niemals eine Überprüfung des Compilertyps bestehen. Dies ist ein example der korrekten memmove Verwendung.

+0

OK, vielen Dank! –

+0

Sie haben Recht! Dies ist kein Fehler in der MFC. Fehler ist in meinem Code, der vollständig ungültig ist. Also habe ich es so korrigiert: memmove (testArray + 2, testArray + 3, sizeof (testArray) -2 * sizeof (testArray [0])); –

+0

Verwenden Sie keine RAW-Funktionen mit CString – Ajay

Verwandte Themen