memcpyの:
memcpyのvoid *型(ソースがvoid *、size_tのNUMをCONST、あなたがしたいですか無効*);
ソースがDESTからデータをコピーするために、size_tのは、そのバイト数、およびタイプにかかわらず注目されます。たとえば、あなたが呼び出すことができます。
INT のmain() { int型の P [ 3 ] = { 4、4、4 }、Q [ 3 ] = { 2、2、2 }。 memcpyを(P、Q、3 * はsizeof(int型)); リターン 0 ; }
3の長さがintを指定する、請求項12の合計は、コピーされたバイト。
MEMMOVE:
ボイド* MEMMOVE(ボイド*先、 CONSTボイド*ソース、size_tのNUM);
およびmemcpyの機能的に類似するが、内部関数は、データを防止するよう、我々は(P + 2、Pのmemcpy Pの配列に関しては、複製中に元の位置を消去します、5 *はsizeof(INT)) 、我々は、データ複製の第3のp [2]の位置を、第一のコピーINT時間ということを見ることができます。
これとのmemcpy MEMMOVE違いは、メモリは、この場合の背面からコピーされたデータをオーバーラップするように識別され得るように、失われたデータ内の重複データ結果を生成することはありません。
原理は2例が別々に扱われたメモリの重複があるかどうか、もしelse文の中にあります。メモリマクロ__np_anyptrltと一致しているかどうかを確認してください。次のようにC言語コードは次のとおりです。
#include <STDDEF.H> / * size_tのため* / ボイド * MEMMOVE(ボイド * DEST、CONST ボイド * SRC、size_tのN) { 符号なしのchar * PD = DEST。 constの符号なしのchar * PS = SRC; もし(__np_anyptrlt(PS、PD)) のための(PD + = N、PS + = N; N - ;) * - PD = * - PS。 他に しばらく(N - ) * PD ++ = * PS ++ ; 返すDEST; }
memcpr:
ボイド*のmemcpy(ボイド*先、 CONSTボイド*ソース、size_tのNUM);
両方の各バイトの大きさを比較する(ASCIIサイズと比較して、「G」は大文字小文字より大きいG「」よりも大きい)
注: '0':48、 ' A' 65 '' 97
memsetの:
void *型のmemset(void *型PTR、 int型の値が、size_tのNUM);
AバイトptrはNUMの値に充填した後。
/ * memsetの例* / 書式#include <stdio.hに> する#include < 文字列の.h> int型のmain() { char型の列str [] = " ほぼすべてのプログラマがmemsetのを知っている必要があります!" 。 memsetの(STR、' - '、6 )。 プット(STR); リターン0 ; }