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