自己写一个strcpy(char*dest,char*src),如何在函数内部实现防御性溢出?

自己写一个strcpy(char*dest,char*src),如何在函数内部实现防御性溢出?

 

void strcpy(char*dest, char*src)
{
    while (*dest != '/0' && *src != '/0')
    {
        *(dest++) = *(src++);
    }
}

char *strcpy(char *strDestination, const char *strSource);
{
    assert((strDestination!=NULL) && (strSource !=NULL));
    char *address = strDestination;
    while( (*strDestination++ = * strSource++) != '/0') NULL ;
    return address ;
}

//以下是高质量C++编程指南上面的解答,楼主参考一下:
char* strcpy(char*strDest,const char*strSrc)
{
    assert(strDest!=NULL&&strSrc!=NULL);    //2分
    char* address=strDest;               //2分
    while(*(strDest++)=*(strSrc++)!='/0') //2分
      NULL;
    return address;                  //2分
}


IsBardReadPtr判断源可读否?
IsBadWritePtr 判断目标地址是否可写,
但这样并不很保险

 

strcpy() 函数将源字符串复制到缓冲区。没有指定要复制字符的具体数目。复制字符的数目直接取决于源字符串中的数目。如果源字符串碰巧来自用户输入,且没有专门限制其大小,则有可能会陷入大的麻烦中!

如果知道目的地缓冲区的大小,则可以添加明确的检查:

if(strlen(src) >= dst_size) {
  /* Do something appropriate, such as throw an error. */
  }
 else {
  strcpy(dst, src);
}

也可以用
strncpy()
代替strcpy()
strncpy(dst, src, dst_size-1);
  dst[dst_size-1] = '/0';

 

确保 strcpy() 不会溢出的另一种方式是,在需要它时就分配空间,确保通过在源字符串上调用 strlen() 来分配足够的空间。例如:

dst = (char *)malloc(strlen(src));
  strcpy(dst, src) 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值