C言語 バッファのコピー(移動) - string.h - [ memmove ]
2008.11.26 Wednesday | by LRESULT
バッファのコピー(移動)をするには、memmove()を使います。
memcpy()と、ほぼ同じ機能ですが、メモリ領域が重なっている場合でも
正しくコピーされるという点が異なります。
※ ただし環境によっては、メモリ領域が重なっても
memcpy()で問題なく動く場合があるようです。(VC8で確認)
書式 | void* memmove( void *s1, const void *s2, size_t n ) |
---|---|
機能 | バッファのコピー(移動) |
引数 | void *s1 : コピー先となるバッファ const void *s2 : コピー元となるバッファ size_t n : コピーするバイト数 |
戻り値 | コピー先バッファ(s1)を返します。 |
※ バッファサイズを超えるような、バイト数(n)を指定すると
メモリ破壊を起こすので注意が必要です。
文字列「1234567890」の、4番目から5文字分を memmove()で重複する領域にコピーしてみます。 |
---|
#include <stdio.h> |
コピー前:1234567890 コピー後:1231234590 |
---|
と、表示されます。 コピー先文字列の4番目に5文字コピーしています。 メモリ領域が重複していますが問題ないわけです。 |