c++ Strcpy和Strncpy的区别 | 周忞 | 吉心的记事本

c++ 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://www.ntxz.net/?p=484 | 周忞 | 吉心的记事本



该日志由 吉心 于2009年11月16日发表在 懒得分类, 旧版博客 分类下, 你可以发表评论
在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: c++ Strcpy和Strncpy的区别 | 周忞 | 吉心的记事本

c++ Strcpy和Strncpy的区别:等您坐沙发呢!

发表评论

您必须 [ 登录 ] 才能发表留言!