memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#include <string.h>
功能:由src所指內存區(qū)域復制count個字節(jié)到dest所指內存區(qū)域。
說明:src和dest所指內存區(qū)域不能重疊,函數(shù)返回指向dest的指針。可以拿它拷貝任何數(shù)據(jù)類型的對象。
舉例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),會造成b的內存地址溢出。
memset
原型:extern void *memset(void *buffer, int c, int count);
用法:#include <string.h>
功能:把buffer所指內存區(qū)域的前count個字節(jié)(buffer指針后的前count個字節(jié))設置成字符c。
說明:返回指向buffer的指針。用來對一段內存空間全部設置為某個字符。
舉例:char a[100];memset(a, '\0', sizeof(a));
memset可以方便的清空一個結構類型的變量或數(shù)組。
如:
struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};
對于變量
struct sample_strcut stTest;
一般情況下,清空stTest的方法:
stTest.csName[0]='\0';
stTest.iSeq=0;
stTest.iType=0;
用memset就非常方便:memset(&stTest,0,sizeof(struct sample_struct));
如果是數(shù)組:struct sample_struct TEST[10];
則memset(TEST,0,sizeof(struct sample_struct)*10);
對這個問題有疑問,不是對函數(shù)的疑問,而是因為沒有弄懂mem和str的區(qū)別。mem是一段內存,他的長度,必須你自己記住;str也是一段內存,不過它的長度,你不用記,隨時都可以計算出來。所以memcpy需要第三個參數(shù),而strcpy不需要。
在 <string.h>, <memory.h>標準流等都有。