memcpy関数の使用方法

5785 ワード

cおよびc++で使用されるメモリコピー関数で、memcpy関数の機能は、ソースsrcが指すメモリアドレスの開始位置からnバイトのターゲットdestが指すメモリアドレスの開始位置へのコピーを開始することである.
1、関数原型
void *memcpy(void *dest, const void *src, size_t n);

 
2、機能
ソースsrcが指すメモリアドレスの開始位置からnバイトをターゲットdestが指すメモリアドレスの開始位置にコピーする
3、必要なヘッダファイル
C言語で#includeを使用する.
C++では#includeと#includeを使用してもよい.
4、戻り値
関数はdestを指すポインタを返します.
5、説明
1.sourceとdestinが指すメモリ領域は重複する可能性がありますが、sourceとdestinが指すメモリ領域が重複する場合、この関数はsourceが存在する重複領域がコピーする前に上書きされないことを保証することはできません.memmoveを使用すると、オーバーラップ領域を処理できます.関数はdestinを指すポインタを返します.
2.ターゲット配列destin自体にデータがある場合、memcpy()を実行すると、元のデータ(最大上書きn)が上書きされます.データを追加する場合は、memcpyを実行するたびに、追加するデータのアドレスにターゲット配列アドレスを追加します.
注意:sourceもdestinも配列とは限らず、任意の読み書き可能な空間でも可能です.
6、関数実現
プログラム例example 1
役割:sの文字列を文字配列dにコピーします.
//memcpy.c
#include 
#include <string.h>
int main()
{
    char* s="GoldenGlobalView";
    chard[20];
    clrscr();
    memcpy(d,s,(strlen(s)+1));
    printf("%s",d);
    getchar();
    return 0;
}
    :Golden Global View

 
     example2 

役割:sの13番目の文字から始まる4つの連続文字をdにコピーします.(0から)
#include<string.h>
int main(
{
    char* s="GoldenGlobalView";
    char d[20];
    memcpy(d,s+12,4);//  13   (V)    ,    4   (View)
    d[4]='\0';//memcpy(d,s+14*sizeof(char),4*sizeof(char));  
    printf("%s",d);
   getchar();
   return 0;
}

出力結果:
View

プログラム例example 3
役割:コピー後に既存のデータを上書きする
#include
#include<string.h>
intmain(void)
{
    char src[]="******************************";
    char dest[]="abcdefghijlkmnopqrstuvwxyz0123as6";
    printf("destination before memcpy:%s
",dest); memcpy(dest,src,strlen(src)); printf("destination after memcpy:%s
",dest); return 0; }

出力結果:
destination before memcpy:abcdefghijlkmnopqrstuvwxyz0123as6
destination after memcpy: ******************************as6

7、区別
strcpyとmemcpyには主に以下の3つの違いがある.
1、コピー内容が違う.strcpyは文字列のみをコピーできますが、memcpyは文字配列、整数、構造体、クラスなど、任意の内容をコピーできます.
2、コピーの仕方が違います.strcpyは長さを指定する必要がなく、コピーされた文字の列終端記号「0」に遭遇してから終了するので、オーバーフローしやすい.memcpyは,その3番目のパラメータに基づいてコピーの長さを決定する.
3、用途が違います.通常、文字列をコピーするときはstrcpyを使用しますが、他のタイプのデータをコピーする必要がある場合はmemcpyを使用します.
転載先:https://www.cnblogs.com/xd-elegant/p/4127416.html