C言語関数のメモリ操作

memcpyの:

memcpyのvoid *型(ソースがvoid *、size_tのNUMをCONST、あなたがしたいですか無効*); 

ソースがDESTからデータをコピーするために、size_tのは、そのバイト数、およびタイプにかかわらず注目されます。たとえば、あなたが呼び出すことができます。
INT のmain()
{ 
    int型の P [ 3 ] = { 444 }、Q [ 3 ] = { 222 }。
    memcpyを(P、Q、3 * はsizeofint型));
    リターン 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 ; 
}


  
   

 

 

 





おすすめ

転載: www.cnblogs.com/FdWzy/p/12466479.html