第132章 memmove関数の新バージョン


VS2005では、memmove関数の新バージョンmemmove_s関数が用意されています。



そもそも、memcpyとmemmove関数の違いは何かというと、前者はコピー元とコピー先の領域に重複があると暴走する可能性がありますが、後者は大丈夫という点です。

errno_t memmove_s(
   void *dest,
   size_t sizeInBytes,
   const void *src,
   size_t count 
);
destは、コピー先のバッファです。

sizeInBytesは、コピー先のバッファサイズです。

srcはコピー元です。

countは、コピーするバイト数です。

では、次のような例ではどうなるか考えてみましょう。

char str[64] = "猫でもわかる魚釣りプログラミング      \n";
これに対して、コピー先バッファをstr + 12とします。

すると、コピーは「猫でもわかる魚・・・」の「魚」のところから始まります。

バッファサイズは、strのサイズより12バイト減ります。 結果としては「猫でもわかるプログラミング \n」となるはずです。

本当に、このようになるのでしょうか。実験してみましょう。

/* memmove01.c */

#include <stdio.h>
#include <string.h>

int main()
{
	char str[64] = "猫でもわかる魚釣りプログラミング      \n";

	memmove_s(str + 12, sizeof(str) - 12, str + 18, 20);

	printf(str);
}
では、結果を見てみましょう。

やはり、予想通りの結果となりましたね。

memmove_s関数は、あまり使う機会がないかもしれません。しかし、知っていると重宝することもあると思われます。




[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Sep/03/2007 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。