関数ヘッダーを読みましたが、ユースケースの点で正確にどのような違いがあるのかまだわかりません。
memcpy()
ある場所から別の場所にコピーします。 memset()
は、すべてのメモリを同じ値に設定するだけです。
例:
memset(str, '*', 50);
上記の行は、文字列strの最初の50文字を*(またはmemsetの2番目の引数)に設定します。
memcpy(str2, str1, 50);
上記の行は、str1の最初の50文字をstr2にコピーします。
memset()
は、指定されたバッファ内のすべてのバイトを同じ値に設定します。memcpy()
は、バイトのシーケンスを別の場所からバッファにコピーします。
char a[4];
memset(a, 7, sizeof(char)*4);
/*
* a is now...
*
* +-+-+-+-+
* |7|7|7|7|
* +-+-+-+-+
*/
char b[] = {1,2,3,4};
char c[4];
memcpy(c, b, sizeof(char)*4);
/*
* c is now...
*
* +-+-+-+-+
* |1|2|3|4|
* +-+-+-+-+
*/
memset
は、メモリのブロックを単一の値に設定します。 memcpy
は、ブロックのコンテンツを別のブロックにコピーします。
おそらく、memcpy
とmemmove
の違いに興味があるでしょう。どちらも同じことをしますが、ソースと宛先が重複していても後者は機能します。
memset()
は、メモリブロック内のすべてのバイトを特定のchar値に設定するために使用されます。 Memsetは、初期化値であるため、char
でもうまく機能します。
memcpy()
はメモリ間でバイトをコピーします。コピーされるこのタイプのデータは無関係であり、バイトごとのコピーを作成するだけです。
memcpy()
ある場所から別の場所にコピーします。 memset()
は、すべてのメモリを同じに設定するだけです。
たとえば、ここでは、文字列strの文字列の長さを*(またはmemsetの2番目の引数)に設定します。
_memset(str, '*', strlen(str)+1);
_
ここでは、文字列srcの文字列長をdestにコピーします。
memcpy(dest, src, strlen(src)+1);