C言語のmemcpy()

オリジナル住所:https://blog.csdn.net/qq_21792169/article/details/50561570

ヘッダファイルします。#include <string.hの>

プロトタイプであるメモリ、コピーするのmemcpy():
    void *型のmemcpy(void *型のdest、CONST void *型SRC、size_tのNUM)を、

NUMのsrcコンテンツの前のmemcpy()のコピーメモリのバイトは、DESTの意味の範囲内のメモリアドレスを参照しました。

memcpy()は、データ複製のいずれかのタイプのために多くの柔軟性をもたらすために、この機能を使用し、バイトのコピーによってのみバイト、コピーするデータの種類を気にしません。

それに注意してください。

    十分なスペースを割り当てるDESTポインタ、すなわち、以上でnumがバイト。あなたはエラーオフスペースを割り当てていない場合。
    メモリ空間の意義の範囲内DESTとsrcができない、オーバーラップ(重複、使用MEMMOVE()はより安全になる場合)。


そして、それを除いてのstrcpy()は、のmemcpy()あなたは、「\ 0」と終了は発生しません、NUMバイトコピー完了します。

[戻る]戻り値ポインタはDESTを指します。注戻り値の型がvoidへのポインタであることを、一般的にキャストを使用。


コード例:

    する#include <stdio.hに> 
    する#include <STDLIB.H> 
    する#include < 文字列・H>
     に#define N(10)
     int型のmain()
    { 
    CHAR * P1 = " ABCDE " CHAR * P2 =(CHAR *)はmallocはsizeofCHAR)* N)。
    CHAR * P3 =(CHAR * )のmemcpy(P1、P2、N)。
    printf(" P2 =%S \ NP3 =%S \ n " 、P2、P3)。
    無料(P2)。
    P2 =NULL; 
    P3 = ; NULL 
    (システム" PAUSE " );
     戻り 0 ; 
    } 
実行結果:
P2 = ABCDE 
P3 = ABCDE

 

定義:
1)コード最初の定義のP1、P2、P3の3つのポインタが、メモリ空間の10バイトに割り当てられた文字列リテラル、P2に若干異なる、P1点。

2)関数ポインタによってP3のmemcpy P2メモリへの直接のポインタが同じメモリへの、即ちポインタP2、P3点を指摘しました。メモリにP2、P3の値を印刷し、その後、結果は同じです。

3)最後に、良い習慣に従って野生のポインタにつながる、再びメモリにアクセスP3を防ぐために、P2、P3ともNULLに設定することを解放します。
---------------------
著者:HeroKern
出典:CSDN
オリジナルます。https://blog.csdn.net/qq_21792169/article/details/50561570
免責事項:この記事ブロガー元の記事として、複製、ボーエンのリンクを添付してください!

おすすめ

転載: www.cnblogs.com/minmin123/p/11927264.html