日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

这是我转贴的strcpy函数与strncpy函数的比较,其中有些错误,建议大家还是看msdn,要好的多

發(fā)布時(shí)間:2025/4/16 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 这是我转贴的strcpy函数与strncpy函数的比较,其中有些错误,建议大家还是看msdn,要好的多 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

strcpy與strncpy函數(shù) (1) Memset 原型:extern void *memset(void *buffer, int c, int count); 用法:#include 功能:把buffer所指內(nèi)存區(qū)域的前count個(gè)字節(jié)設(shè)置成字符c。說明:返回指向buffer的指針。用來對一段內(nèi)存空間全部設(shè)置為某個(gè)字符例:char a[10];memset(a, '/0', sizeof(a)); memset可以方便的清空一個(gè)結(jié)構(gòu)類型的變量或數(shù)組。如: struct _test { char s[10]; int x; int y; }; 變量 struct _test st; (1)一般清空st的方法如下: st.s[0] = '/0'; st.x = 0; st.y = 0; (2) 用memset方法如下: memset(&st,0,sizeof(struct _test)); 數(shù)組: struct _test st[10]; 則用 memset(st,0,sizeof(struct _test)*10); (2)memcpy 原型:extern void *memcpy(void *dest, void *src, unsigned int count); 用法:#include 功能:由src所指內(nèi)存區(qū)域復(fù)制count個(gè)字節(jié)到dest所指內(nèi)存區(qū)域。說明:src和dest所指內(nèi)存區(qū)域不能重疊,函數(shù)返回指向dest的指針。可以拿它拷貝任何數(shù)據(jù)類型的對象。 例:char a[10],b[5]; memcpy(b, a, sizeof(b)); /*注意如果用sizeof(a),會造成b的內(nèi)存地址溢出*/ (3) Strcpy 原型:extern char *strcpy(char *dest,char *src); 用法:#include 功能:把src所指由NULL結(jié)束的字符串復(fù)制到dest所指的數(shù)組中。說明:src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來容納src的字符串。返回指向dest的指針。 例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串長度(第一個(gè)‘/0’之前)是否超過50位,如超過,則會造成b的內(nèi)存地址溢出 (4) 三者區(qū)別 memset 主要應(yīng)用是初始化某個(gè)內(nèi)存空間。 memcpy 是用于copy源空間的數(shù)據(jù)到目的空間中。 strcpy 用于字符串copy,遇到‘/0’,將結(jié)束。如果理解了這些,就能知道它們的區(qū)別:例如初始化某塊空間的時(shí)候,用到memcpy,那么就顯得很笨拙了。 int m[100] memset((void*)m,0x00,sizeof(int)*100); //Ok! memcpy((void*)m,"/0/0/0/0....",sizeof(int)*100); //Not Ok! Strcpy和Strncpy的區(qū)別- - 第一種情況: char* p="how are you ?"; char name[20]="ABCDEFGHIJKLMNOPQRS"; strcpy(name,p); //name改變?yōu)?#34;how are you ? OPQRS " ====>錯(cuò)誤! strncpy(name,p,sizeof(name)) //name改變?yōu)?#34;how are you ? " ====>正確! 第二種情況: char* p="how are you ?"; char name[20]; strcpy(name,p); //name改變?yōu)?#34;how are you ? 未知字符 " ====>錯(cuò)誤! name[sizeof(name)-1]='/0' //和上一步組合,得到正確的結(jié)果! strncpy(name,p,sizeof(name)); //name改變?yōu)?#34;how are you ? " ====>正確! 第三種情況: char* p="how are you ?"; char name[10]; strcpy(name,p); //name改變?yōu)?#34;how are yo" ====>無結(jié)束符'/0',錯(cuò)誤! name[sizeof(name)-1]='/0' //和上一步組合,彌補(bǔ)結(jié)果。但要注意,字符傳遞錯(cuò)誤! strncpy(name,p,sizeof(name)); //和單純的一步strcpy結(jié)果一樣! ================================================ 總結(jié):strcpy 如果源長>目標(biāo)長,則將源長中等于目標(biāo)長的字符拷貝到目標(biāo)字符串 如果源長<目標(biāo)長,則源長全部拷貝到目標(biāo)字符串,不包括'/0' strncpy 如果目標(biāo)長>指定長>源長,則將源長全部拷貝到目標(biāo)長,自動加上'/0' 如果指定長<源長,則將源長中按指定長度拷貝到目標(biāo)字符串,不包括'/0' 如果指定長>目標(biāo)長,error happen! strncpy(sptsf_cert.peer_ditm_no,clr_total.payint_acc+7,8) //從第8位后8位拷貝 strncpy(sptsf_cert.recv_inst,clr_total.payint_acc,4);//拷貝前四位為了您的安全,請只打開來源可靠的網(wǎng)址打開網(wǎng)站 取消來自: http://hi.baidu.com/wenleiworld/blog/item/175e072ad002aef0e6cd4033.html http://apps.hi.baidu.com/share/detail/7256732

總結(jié)

以上是生活随笔為你收集整理的这是我转贴的strcpy函数与strncpy函数的比较,其中有些错误,建议大家还是看msdn,要好的多的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。