strcpy与strncpy函数的陷阱与缺陷(今天更新补充完)

本文探讨了C语言中的strcpy和strncpy函数在处理字符串时可能遇到的问题。通过实例分析,指出当目标缓冲区大小不足时,strcpy可能导致内存越界,而strncpy虽然提供了一定的安全性,但可能导致内容被截断。建议在未知源字符串长度的情况下,使用strlen配合malloc来动态分配内存,以避免潜在的内存安全问题。
摘要由CSDN通过智能技术生成

 前言,最近看到一篇博客有如下一段代码,该代码执行时会出现错误,A博主的意思是因为str的空间太小, p指向的串太大引起的

但是我在ubuntu下运行时,没有错误,应该是编译环境不同吧,然后又在一篇博客看到如下一段话,B博主部分内容如下图: 

意思是说与长短无关,可是之前那个博主为什么会出现错误?????于是我自己试了一下,如下代码str长度为1,然后使用strcpy,结果印证了B博主的话。

需要注意的是代码中 (char *)0x601041与 (char *)0x601042地址是测试时str[0]的地址是0x601040,这里将0x601041,0x601042强制类型转换后变成一个指针,在用另一个指针指向它,最后打印出该地址存放的值,结果证明str[1]里面的值确实被str2覆盖了,但是str[1]这个变量是不存在的,而&str[1]这个地址是存在的,这点一定要明白,虽然我们只定义char str[1],他只有一个元素,但是str是个指针,str+1,就是地址加一,只是我们不能

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值