strcpy与strncpy存在的问题

1、函数原型

1.1 strcpy

char *strcpy(char *dest, const char *src);
/*
头文件:#include <string.h>
功能:将src中的内容复制到dest中
参数:
    @dest:目标地址
    @src:要复制的字符串
返回值:指向dest的指针
*/

1.2 strncpy

char *strncpy(char *dest, const char *src, size_t n);
/*
头文件:#include <string.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
参数:
    @dest:目标地址
    @src:要复制的字符串
    @n:复制的字符串长度
返回值:指向dest的指针
*/

2、strcpy与strncpy存在的问题

2.1 strcpy的问题

        strcpy的拷贝是把含有 '\0' 结束符的字符串复制到另一个地址空间,所有如果目标地址的地址空间不够大的话,就会导致缓存区溢出的问题。

2.2 strncpy的问题

        strncpy复制的是字符,是不会复制 '\0' 的,但是strcpy是复制的字符串,会复制 '\0',所以,如果目标地址中有数据的话,就可能会导致错误,所以在使用strncpy时,可以使用以下两个方法:

1、在复制前将目标地址清'0'

2、在复制完成后在最后一位加上 '\0'

//法一
char src[10]= "123456789";
char dest[10];
memset(dest, '\0', sizeof(dest));
strncpy(str, p, sizeof(str) - 1);

//法二
char src[10]= "123456789";
char dest[10];
strncpy(str, p, sizeof(str) - 1);
dest[sizeof(str)-1] = '\0';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值