【strcpy】的注意点

strcpy函数作用和

Strcpy函数将str Source,包括终止空字符,复制到str Destination指定的位置。复制或追加字符串时不进行溢出检查。如果源和目的字符串重叠,strcpy的行为是未定义的。

复制字符串时不要越界

strcpy不会检查复制的字符串是否溢出,也就是说,当str Destination内存空间不足以存放str Source时,编译器不会报错

可以看到,程序运行起来的确出现了我们想要的结果,但是这里提示Stack around the bariable str1 was corrupted 提示str1周围的栈是腐败的,str1周围的栈出现了问题,因为str1的内存空间是4字节,str2空间是6字节,将6字节的内容放在4字节的内容,明显放不下,于是在str1后面强行把原本不属于str1的2字节空间用来存放str2的内容,非法访问了不属于str1的空间,这样的结果就是很有可能让我们后面的程序崩溃因为不属于str1的空间中可能存放了很重要的内容。

strcpy第一个参数不能是指向常量的指针

先来看一个代码

ps是字符指针数组,ps[0]是指向常量字符串“123”的指针,ps[1]是指向常量“abc”的指针
我们将ps[1]指向的内容替换ps[0]指向的内容,但是ps[0]指向的内容是常量字符串,常量字符串只具有可读性,不可以被修改,所以程序会崩溃。
如果我们想让ps[0]指向的内容和ps[1]一样,该怎么做?

我们直接将ps[1]的值赋值给ps[0],这样ps[0]指向的也是常量字符串“abc”。

我们再来看一段代码


这段代码和上面的代码有什么不同?zhiz
此时ps[0]是一个指针,这个指针不在是指向常量的,只能说指针指向的内容和常量字符串“123”一样,可以将ps[0]所指向的内容看作常量“123”的拷贝,ps[0](str1)所指向的内容是可以改变的
所以在这里strcpy的意思是,用str2所指向的内容(“abc”)替换str1所指向的内容(“123”)

总结

  1. 使用strcpy需要检查str Destination的空间是否足够容纳str Source
  2. 使用strcpu时,第一个指针不可以指向常量
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值