深析strcpy与strncpy函数的功能及缺陷

首先,两者都是字符串拷贝函数,不同的是两个的参数个数不一样。

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;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值