22

関数ヘッダーを読みましたが、ユースケースに関して正確な違いが何であるかはまだわかりません。

4

6 に答える 6

48

memcpy()ある場所から別の場所にコピーします。memset()すべてのメモリを同じ値に設定するだけです。

例:

memset(str, '*', 50);   

上記の行は、文字列 str の最初の 50 文字を * (または memset の第 2 引数) に設定します。

memcpy(str2, str1, 50); 

上記の行は、str1 の最初の 50 文字を str2 にコピーします。

于 2009-10-08T06:51:26.277 に答える
15

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|
* +-+-+-+-+
*/
于 2009-10-08T06:50:34.720 に答える
3

memsetメモリのブロックを単一の値に設定します。memcpyブロックの内容を別のブロックにコピーします。

と の違いに興味があるかもしれませmemcpymemmove。どちらも同じことを行いますが、後者はソースと宛先が重複していても機能します。

于 2009-10-08T06:51:26.537 に答える
3

memset()メモリのブロック内のすべてのバイトを特定の char 値に設定するために使用されます。Memset もchar初期化値であるため、うまく機能します。

memcpy()メモリ間でバイトをコピーします。コピーされるこのタイプのデータは無関係であり、バイトごとのコピーを作成するだけです。

于 2009-10-08T06:53:21.953 に答える