首先,两者都是字符串拷贝函数,不同的是两个的参数个数不一样。
char *strcpy(char *dest,const char *src)
char *strncpy(char *dest,const char *src,size_t count)
//表示可以从源拷贝多长
strcpy函数:若参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误;
strncpy 函数:用来复制源字符串的n个字符,src和dest 所指的区域不能有重叠,并且dest必须有足够空间存放,否则会出现越界和栈溢出的错误。
my_strncpy(str1+5,str1,4);
例如:strncpy在进行自我拷贝时会出现重叠区域
总结:strncpy
1、如果目标长>指定长>源长,则将源长全部拷贝到目标长,自动加上’\0’;
2、指定长<源长,则将源长中按照指定的长度拷贝到目标字符串中,不包括’\0’;
3、若指定长>目标长运行错误
char *my_strcpy(char* dest,const char *src)
{
if(NULL==src||NULL==dest) return dest;
char *cp=dest;
//while(*dest++=*src++);
while(*src!='\0')
{
*cp=*src;
cp++;
src++;
}
*cp='\0';
return dest;
}
char *my_strncpy(char *dest,const char *src,size_t count)
{
if(NULL==dest ||NULL==src) return dest;
char *cp=dest;
int i =0;
for( ;i<count && *src!='\0';++i)
{
*cp = *src;
cp++;
src++;
}
while(i<count)
{
*cp='\0';
cp++;
++i;
}
return dest;
}