这是我转贴的strcpy函数与strncpy函数的比较,其中有些错误,建议大家还是看msdn,要好的多
strcpy與strncpy函數 (1) Memset 原型:extern void *memset(void *buffer, int c, int count); 用法:#include 功能:把buffer所指內存區域的前count個字節設置成字符c。說明:返回指向buffer的指針。用來對一段內存空間全部設置為某個字符例:char a[10];memset(a, '/0', sizeof(a)); memset可以方便的清空一個結構類型的變量或數組。如: 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)); 數組: 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所指內存區域復制count個字節到dest所指內存區域。說明:src和dest所指內存區域不能重疊,函數返回指向dest的指針。可以拿它拷貝任何數據類型的對象。 例:char a[10],b[5]; memcpy(b, a, sizeof(b)); /*注意如果用sizeof(a),會造成b的內存地址溢出*/ (3) Strcpy 原型:extern char *strcpy(char *dest,char *src); 用法:#include 功能:把src所指由NULL結束的字符串復制到dest所指的數組中。說明:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。返回指向dest的指針。 例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串長度(第一個‘/0’之前)是否超過50位,如超過,則會造成b的內存地址溢出 (4) 三者區別 memset 主要應用是初始化某個內存空間。 memcpy 是用于copy源空間的數據到目的空間中。 strcpy 用于字符串copy,遇到‘/0’,將結束。如果理解了這些,就能知道它們的區別:例如初始化某塊空間的時候,用到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的區別- - 第一種情況: char* p="how are you ?"; char name[20]="ABCDEFGHIJKLMNOPQRS"; strcpy(name,p); //name改變為"how are you ? OPQRS " ====>錯誤! strncpy(name,p,sizeof(name)) //name改變為"how are you ? " ====>正確! 第二種情況: char* p="how are you ?"; char name[20]; strcpy(name,p); //name改變為"how are you ? 未知字符 " ====>錯誤! name[sizeof(name)-1]='/0' //和上一步組合,得到正確的結果! strncpy(name,p,sizeof(name)); //name改變為"how are you ? " ====>正確! 第三種情況: char* p="how are you ?"; char name[10]; strcpy(name,p); //name改變為"how are yo" ====>無結束符'/0',錯誤! name[sizeof(name)-1]='/0' //和上一步組合,彌補結果。但要注意,字符傳遞錯誤! strncpy(name,p,sizeof(name)); //和單純的一步strcpy結果一樣! ================================================ 總結:strcpy 如果源長>目標長,則將源長中等于目標長的字符拷貝到目標字符串 如果源長<目標長,則源長全部拷貝到目標字符串,不包括'/0' strncpy 如果目標長>指定長>源長,則將源長全部拷貝到目標長,自動加上'/0' 如果指定長<源長,則將源長中按指定長度拷貝到目標字符串,不包括'/0' 如果指定長>目標長,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);//拷貝前四位為了您的安全,請只打開來源可靠的網址打開網站 取消來自: http://hi.baidu.com/wenleiworld/blog/item/175e072ad002aef0e6cd4033.html http://apps.hi.baidu.com/share/detail/7256732
總結
以上是生活随笔為你收集整理的这是我转贴的strcpy函数与strncpy函数的比较,其中有些错误,建议大家还是看msdn,要好的多的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC/MFC中常用宏的含义
- 下一篇: 从这篇文章可以看出有些错误,由此可以看出