Chinaunix首页 | 论坛 | 博客
  • 博客访问: 368462
  • 博文数量: 53
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 1143
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-14 11:53
文章分类

全部博文(53)

文章存档

2011年(1)

2008年(52)

我的朋友

分类: C/C++

2008-04-09 11:50:21

char * strncpy(char *s1,char *s2,size_t n);
将字符串s2中最多n个字符复制到字符数组s1中,返回s1的值。
注意:strncpy不复制最后的'\0'结束符,所以是不安全的,复制完后需要手动添加字符串的结束符才行。

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!
阅读(2289) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~