memcpy関数の使用方法
5785 ワード
cおよびc++で使用されるメモリコピー関数で、memcpy関数の機能は、ソースsrcが指すメモリアドレスの開始位置からnバイトのターゲットdestが指すメモリアドレスの開始位置へのコピーを開始することである.
1、関数原型
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にコピーします.
役割:sの13番目の文字から始まる4つの連続文字をdにコピーします.(0から)
出力結果:
プログラム例example 3
役割:コピー後に既存のデータを上書きする
出力結果:
7、区別
strcpyとmemcpyには主に以下の3つの違いがある.
1、コピー内容が違う.strcpyは文字列のみをコピーできますが、memcpyは文字配列、整数、構造体、クラスなど、任意の内容をコピーできます.
2、コピーの仕方が違います.strcpyは長さを指定する必要がなく、コピーされた文字の列終端記号「0」に遭遇してから終了するので、オーバーフローしやすい.memcpyは,その3番目のパラメータに基づいてコピーの長さを決定する.
3、用途が違います.通常、文字列をコピーするときはstrcpyを使用しますが、他のタイプのデータをコピーする必要がある場合はmemcpyを使用します.
転載先:https://www.cnblogs.com/xd-elegant/p/4127416.html
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