C言語 バッファのコピー(移動) - string.h - [ memmove ]

2008.11.26 Wednesday | by LRESULT


ッファのコピー(移動)をするには、memmove()を使います。

memcpy()と、ほぼ同じ機能ですが、メモリ領域が重なっている場合でも
正しくコピーされるという点が異なります。

ただし環境によっては、メモリ領域が重なっても
  memcpy()で問題なく動く場合があるようです。(VC8で確認)


memmove
書式 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>
#include <string.h>

int main(void)
{
  char s1[] = "1234567890";

  printf( "コピー前:%s¥n", s1 );
  memmove( s1+3, s1, 5 );
  printf( "コピー後:%s¥n", s1 );

  return 0;
}




結果
コピー前:1234567890
コピー後:1231234590
と、表示されます。

コピー先文字列の4番目に5文字コピーしています。
メモリ領域が重複していますが問題ないわけです。

カテゴリ:C言語 string.h | 23:00 | comments(0) | trackbacks(0) | -


コメントする











この記事のトラックバックURL

http://simd.jugem.jp/trackback/144

トラックバック