memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#include <string.h>
功能:由src所指內存區域復制count個字節到dest所指內存區域。
說明:src和dest所指內存區域不能重疊,函數返回指向dest的指針。可以拿它拷貝任何數據類型的對象。
舉例: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所指內存區域的前count個字節(buffer指針后的前count個字節)設置成字符c。
說明:返回指向buffer的指針。用來對一段內存空間全部設置為某個字符。
舉例:char a[100];memset(a, '\0', sizeof(a));
memset可以方便的清空一個結構類型的變量或數組。
如:
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));
如果是數組:struct sample_struct TEST[10];
則memset(TEST,0,sizeof(struct sample_struct)*10);
對這個問題有疑問,不是對函數的疑問,而是因為沒有弄懂mem和str的區別。mem是一段內存,他的長度,必須你自己記住;str也是一段內存,不過它的長度,你不用記,隨時都可以計算出來。所以memcpy需要第三個參數,而strcpy不需要。
在 <string.h>, <memory.h>標準流等都有。