文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>strcpy. memcpy.strncpy 函数

strcpy. memcpy.strncpy 函数

时间:2010-10-21  来源:wbwk2005

 strcpy

作用:进行字符串拷贝,遇到‘\0’后结束拷贝,要求原串地址与目的串地址不能重合

函数原型:char * strcpy(char * des, const char * src)

{

assert((des!=NULL)&&(src!=NULL));

char *add=des;

while((*des++=*src++)!='\0');

return add;

}

 

memcpy:

功能:进行内存的拷贝,与strcpy的不同在于strcpy只能拷贝字串,即遇到\0就结束拷贝,但是本函数不管遇到什么都会继续拷贝,直到达到了既定的内存个数。

函数原型:

void * memcpy(void * des, const void *src, int count)

{

assert((des!=NULL)&&(src!=NULL));

void * add=des;

while(count-->0)

*des++=*src++;

return add;

}

 

strncpy函数:

功能:依然是字符串的拷贝,但是拷贝固定的字符个数,也需要受到\0的限制

原型:

char *strncpy(char * des, const char * src, int count)

{

 assert((des!=NULL)&(src!=NULL));

char * add=des;

if(count<=strlen(src))

 {

while(count-->0)

*des++=*src++;

for(int i=0;i<(sizeof(des)-count);i++)

 * ++des='\0'

}

else if(count>=strlen(src)&&count<=strlen(des))

{

int n=strlen(src);

while(n-->0)

*des++=*src++;

for(int i=0;i<(strlen(des)-strlen(src));i++)

*++des='\0';

}

return add;

}

 


总结:strcpy 
如果源长>目标长,则将源长中等于目标长的字符拷贝到目标字符串 
如果源长<目标长,则源长全部拷贝到目标字符串,不包括'\0' 
strncpy 
如果目标长>指定长>源长,则将源长全部拷贝到目标长,自动加上'\0' 
如果指定长<源长,则将源长中按指定长度拷贝到目标字符串,不包括'\0' 
如果指定长>目标长,error happen! 

 

strncpy为strcpy的一个安全版本:

列入:

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结果一样! 

相关阅读 更多 +
排行榜 更多 +
雷电觉醒安卓版

雷电觉醒安卓版

飞行射击 下载
3D幻影飞车最新版

3D幻影飞车最新版

飞行射击 下载
星河一号战队

星河一号战队

飞行射击 下载