memset,memcpyとmemmove,strcpy
2492 ワード
void *memset( void *buffer, int ch, size_t count );
memset関数bufferの前count項目をchに設定
void *memcpy(void *dst,void *src,size_t count);
memcpy関数はメモリコピーに使用され、ユーザーはデータ型のオブジェクトをコピーするために使用できます.srcが指すメモリ領域からcountバイトをdstが指すメモリ領域にコピーします.ただし、srcとdstが指すメモリ領域は重複せず、dstを指すポインタを返します.
void* memmove(void* dst,const void* src,size_t count);
memmoveの役割は、1つのメモリ領域のデータを別の領域に移動し、ターゲット領域の値を指すポインタを返すことです.srcとdstが示すメモリ領域が重複している場合、関数は重複領域が書き換えられる前にコンテンツをコピーします.
char* strcpy(char* dst,char* src)
strcpy関数の機能は、srcが指すNULLで終わる文字列をdstが指す文字列にコピーすることです.ここで、srcとdstが指すメモリ領域は重複してはならず、dstは、destを指すポインタを返すsrcの文字列を収容するのに十分な空間を有しなければならない.
strcpyとmemcpyの違い
strcpyは文字列のコピーにのみ使用できますが、memcpyはメモリコピーに使用されます.strcpyは'0'に遭遇するとcopyを終了しますが、memcpyは
memmoveとmemcpyの違い
destの頭部とsrcの尾部が重なる場合に現れる
memset関数bufferの前count項目をchに設定
void *memcpy(void *dst,void *src,size_t count);
memcpy関数はメモリコピーに使用され、ユーザーはデータ型のオブジェクトをコピーするために使用できます.srcが指すメモリ領域からcountバイトをdstが指すメモリ領域にコピーします.ただし、srcとdstが指すメモリ領域は重複せず、dstを指すポインタを返します.
void* memmove(void* dst,const void* src,size_t count);
memmoveの役割は、1つのメモリ領域のデータを別の領域に移動し、ターゲット領域の値を指すポインタを返すことです.srcとdstが示すメモリ領域が重複している場合、関数は重複領域が書き換えられる前にコンテンツをコピーします.
char* strcpy(char* dst,char* src)
strcpy関数の機能は、srcが指すNULLで終わる文字列をdstが指す文字列にコピーすることです.ここで、srcとdstが指すメモリ領域は重複してはならず、dstは、destを指すポインタを返すsrcの文字列を収容するのに十分な空間を有しなければならない.
strcpyとmemcpyの違い
strcpyは文字列のコピーにのみ使用できますが、memcpyはメモリコピーに使用されます.strcpyは'0'に遭遇するとcopyを終了しますが、memcpyは
memmoveとmemcpyの違い
destの頭部とsrcの尾部が重なる場合に現れる
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char *c = "abc";
char *d = new char[sizeof(c)+1];
strcpy(d,c);
d[sizeof(d)-1]='\0';
cout << "strcpy c to d:" << d << endl;
char e[10];
memset(e,'3',5);
cout << "memset:" << e << endl;
char f[11];
memcpy(f,e,sizeof(e));
cout << "memcpy from e to f:" << f << endl;
char g[10];
memmove(g,f,sizeof(g));
cout << "memmove f to g,f:" << f << endl;
cout << "memmove f to g,g:" << g << endl;
cout << "diff memmove and memcopy:" << endl;
int h[10] = {1,2,3,4,5,6,7,8,9,10};
memmove(&h[4],h,sizeof(int)*6);
cout << "memmove:";
for(int i=0;i<sizeof(h)/sizeof(int);i++)
cout << h[i] << " ";
cout << endl;
int j[10] = {1,2,3,4,5,6,7,8,9,10};
memcpy(&j[4],j,sizeof(int)*6);
cout << "memcpy:";
for(int i=0;i<sizeof(j)/sizeof(int);i++)
cout << j[i] << " ";
cout << endl;
}
strcpy c to d:abc
memset:33333
memcpy from e to f:33333
memmove f to g,f:33333
memmove f to g,g:33333
diff memmove and memcopy:
memmove:1 2 3 4 1 2 3 4 5 6
memcpy:1 2 3 4 1 2 3 4 1 2