7

memmoveについて読んでいるときに、MEMORY OVERLAPSを処理できることを読みましたが、2つの文字列間でメモリのオーバーラップがどのように発生するか、およびこの関数がメモリのブロックを正しくコピーする方法を理解できません。

4

2 に答える 2

5

「メモリオーバーラップ」はそれ自体では発生しません。memmoveオーバーラップするメモリ領域で機能を提供できるのはあなたです。同じ配列に2つのポインタを入れると、メモリ領域が重複してしまう可能性があります。

もちろん、ユニオンを介してオーバーラップするオブジェクトを簡単に作成することもできます。

質問の2番目の部分が何を意味するのかは明確ではありません(「この関数がメモリのブロックを正しくコピーするにはどうすればよいですか」)。ここで問題はどこにありますか?

于 2010-09-03T16:37:31.493 に答える
3
 memmove(p+1, p, 42);

これには、最後からバイトを移動する必要があります。Memcpy()はそれを台無しにします。

于 2010-09-03T16:28:31.607 に答える