一.函數原型
strcpy
extern char *strcpy(char *dest,char *src);
#include <string.h>
功能:把src所指由NULL結束的字串複製到dest所指的數組中
說明:src和dest所指記憶體地區不可以重疊且dest必須有足夠的空間來容納src的字串。
返回指向dest的指標
memcpy
extern void *memcpy(void *dest,void *src,unsigned int count);
#include <string.h>
功能:由src所指記憶體地區複製count個字串到dest所指記憶體地區.
說明:src和dest所指記憶體地區不能重疊,函數返回指向dest的指標.
memset
extern void *memset(void *buffer,int c,int count);
#include <string.h>
功能:把buffer所指記憶體地區的前count個位元組設定成字元c
說明:返回指向buffer的指標.
二.區別
memset 用來對一段記憶體空間全部設定為某個字元,一般用於在對定義的字串初始化為' '或者'\0';
例: char a[100];
memset(a,'\0',sizeof(a));
memcpy 是用來做記憶體拷貝,可以用來拷貝任何資料類型的對象,可以指定拷貝的資料長度;
例:
char a[100],b[50];
memcpy(b,a,sizeof(b)); //注意:如果使用sizeof(a),會造成記憶體溢出
mem是一段記憶體,他的長度,必須自己記住.memcpy是見著什麼拷貝什麼。
strcpy 就只能拷貝字串,它遇到'\0'就結束拷貝;
例:char a[100],b[50];
strcpy(a,b);
如用strcpy(b,a)要注意a中的字串長度(第一個'\0'之前) 是否超過50,如果超過,則會造成b的
記憶體溢出.它是不會拷貝'\0'的,所以一般還有加一個語句:
*a='\0';
三.提示
memset 可以方便的清空一個資料結構的變數或數組.
如:
struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};
對於變數
struct sample_struct stTest;
一般情況下,初始化stTest的方法:
stTest.csName[0]='\0';
stTest.iSeq=0;
stTest.iType=0;
而用memset:
memset(&stTest,0,sizeof(struct sample_struct));
如果是數組:
struct sample_struct TEST[100];
memset(TEST,0,sizeof(struct sample_struct)*100);
strcpy是拷貝字串,以\0為標誌結束(即一旦遇到資料值為0的記憶體位址拷貝過程即停止)
strcpy的原型為
char *strcpy(char *dest, const char *src)
而memcpy是給定來源和目標後,拷貝指定大小n的記憶體資料,而不管拷貝的內容是什麼(不僅限於字元)
memcpy的原型為
void *memcpy(void *dest, const void *src, size_t n);