1、memcpy 頭文件:#include <string.h> 函數(shù)原型:void *memcpy(void *dest, const void *src, size_t n) 功能:將指針src指向的內(nèi)存空間的n個(gè)字節(jié)復(fù)制到dest指針指向的內(nèi)存空間 參數(shù):src 為原內(nèi)容內(nèi)存的起始地址,dest為復(fù)制到目標(biāo)地址的起始地址 返回值:目標(biāo)dest內(nèi)存的起始地址 注意:1、內(nèi)存空間不能夠有重疊; 2、memcpy對(duì)于需要復(fù)制的內(nèi)容沒有限制,因此用途更廣; 3、很明確的是memcpy是將 n個(gè)字節(jié), 雖然memcpy對(duì)復(fù)制的內(nèi)容完全沒有任何的限制,比如數(shù)組,結(jié)構(gòu)體等特殊的結(jié)構(gòu),如果你想將整個(gè)結(jié)構(gòu)體變量的內(nèi)容復(fù)制到dest內(nèi)存區(qū),最好使用sizeof將要復(fù)制的內(nèi)容的完整大小求出來賦值給n,以保持復(fù)制的完整性; c代碼:
2、memset 頭文件:#include <string.h> 函數(shù)原型:void *memset(void *s, int c, size_t n) 功能:以s為起始位置的n個(gè)字節(jié)的內(nèi)存區(qū)域用整數(shù)c進(jìn)行填充 參數(shù):s為內(nèi)存區(qū)域的起始位置,c為要填充的字符,n為要填充多少個(gè)字節(jié) 返回值:目標(biāo)s內(nèi)存的起始地址 注意:1、n表示的是字節(jié)數(shù),函數(shù)是以字節(jié)的形式每次賦值給目標(biāo)地址; 2、memset函數(shù)也是以字節(jié)為單位進(jìn)行賦值的,所以要想在整形數(shù)組中給每一位賦確定的非0值,一般來講是不可行的;(下方將有對(duì)此說明測(cè)試的程序) c代碼:
下面是針對(duì)注意事項(xiàng)的測(cè)試程序:
結(jié)果:
結(jié)果分析:可以看出得出的結(jié)果并沒有得到想要的1,而得出不知道是什么的東西; 1的二進(jìn)制表示是:0000 0000 0000 0000 0000 0000 0000 0001 memset函數(shù)也是以字節(jié)為單位進(jìn)行賦值的,指針每次只會(huì)向后移動(dòng)一個(gè)字節(jié),依此將值賦給每次的地址中,直到n = 0; 最后在四個(gè)字節(jié)中賦值的結(jié)果為:0000 0001 0000 0001 0000 0001 0000 0001 十進(jìn)制顯示就為:16843009 當(dāng)把數(shù)組改成char buf[10]時(shí),顯示的結(jié)果如下:(更加證明是以字節(jié)方式賦值)
|
|