2016-06-17 6 views
1

私は私は、Visual Studio 2010でコンパイルMFCを使用しています、と私は、次のエラーを取得しています: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のような低レベルのメモリコピー・ルーチンを使用して

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

  1. は失敗に必ず証明の方法です: は慎重に見てみましょう。 CStringのようなクラスでは、動的メモリ割り当てを使用してメモリを直接オーバーライドすると、メモリリークから始まり、すぐにアプリケーションが失敗するなど、何らかの問題が発生する可能性があります。 CStringデータをコピーする場合は、CString::InsertCString::Replace、代入演算子またはコピーコンストラクタを使用します。

  2. memmove関数は、ソースメモリブロックとデスティネーションメモリブロックへの2つのポインタをとります。代わりに2つのCStringインスタンスを渡そうとしています。もちろんこれは無効であり、コンパイラの型チェックを渡すことはありません。これは正しいmemmove使用のexampleです。

+0

よろしくお願い致します。 –

+0

あなたは正しいです!これは、MFCのエラーではありません。 エラーは私のコードにありますが、これは完全に無効です。 したがって、私はこれを次のように修正しました: memmove(testArray + 2、testArray + 3、sizeof(testArray)-2 * sizeof(testArray [0])); –

+0

DONT CStringでraw関数を使用 – Ajay

関連する問題