鱼C论坛

 找回密码
 立即注册
查看: 1333|回复: 8

[已解决]在使用strcpy时并没有发生溢出怎么回事

[复制链接]
发表于 2018-8-1 20:34:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我使用的是code::blocks
最佳答案
2018-8-1 20:42:42
本帖最后由 无符号整形 于 2018-8-2 08:16 编辑

很幸运啊,老兄,内存对齐拯救了你!
"Original string\0" = 16字节
"New string\0" = 11字节,对齐4字节(即往上对齐到最近的2的幂,只不过这个幂要能被4整除)(32位默认4字节,64位默认8字节)对齐后=11+5=16字节

2018.8.2:应该是覆盖了栈中的数据。

编译结果

编译结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-2 08:15:59 | 显示全部楼层
洛城闻笛 发表于 2018-8-1 21:04
有点晕,比如我现在是17字节,64位的机子,最近的8的整数是24,最近2的幂是2^5=32且能被8整除,那么按照 ...

对了,我刚刚查了下资料,应该不是内存对齐的问题,是你很幸运没有访问非法,有时候越界一点点是没事的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-1 20:42:42 | 显示全部楼层    本楼为最佳答案   
本帖最后由 无符号整形 于 2018-8-2 08:16 编辑

很幸运啊,老兄,内存对齐拯救了你!
"Original string\0" = 16字节
"New string\0" = 11字节,对齐4字节(即往上对齐到最近的2的幂,只不过这个幂要能被4整除)(32位默认4字节,64位默认8字节)对齐后=11+5=16字节

2018.8.2:应该是覆盖了栈中的数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-1 20:51:31 | 显示全部楼层
无符号整形 发表于 2018-8-1 20:42
很幸运啊,老兄,内存对齐拯救了你!
"Original string\0" = 15字节,对齐4字节(即往上对齐到最 ...

谢谢,刚我试了下把 str1 加长了就出现了溢出.我想请问下字符串结束符 '\0' 在内存是不占空间吗,因为看你的 “original string\0"是15个字节算'\0'的话应该16啊,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-1 20:53:02 | 显示全部楼层
洛城闻笛 发表于 2018-8-1 20:51
谢谢,刚我试了下把 str1 加长了就出现了溢出.我想请问下字符串结束符 '\0' 在内存是不占空间吗,因为看 ...

哦哦对,我数错了,抱歉。。
另外您可以采纳我的答案吗?被采纳是对我们回答者的肯定~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-1 20:57:18 | 显示全部楼层
无符号整形 发表于 2018-8-1 20:53
哦哦对,我数错了,抱歉。。
另外您可以采纳我的答案吗?被采纳是对我们回答者的肯定~

如果是64位机的话,那就是8字节的就近整数倍是吗。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-1 21:00:30 | 显示全部楼层
洛城闻笛 发表于 2018-8-1 20:57
如果是64位机的话,那就是8字节的就近整数倍是吗。

嗯嗯,最少对齐8字节。
实测好像不是整数倍,是最接近的2的幂?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-1 21:04:08 | 显示全部楼层
无符号整形 发表于 2018-8-1 21:00
嗯嗯,最少对齐8字节。
实测好像不是整数倍,是最接近的2的幂?

有点晕,比如我现在是17字节,64位的机子,最近的8的整数是24,最近2的幂是2^5=32且能被8整除,那么按照您的说法是 24字节还是32字节呢分配!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-1 21:38:04 | 显示全部楼层
洛城闻笛 发表于 2018-8-1 21:04
有点晕,比如我现在是17字节,64位的机子,最近的8的整数是24,最近2的幂是2^5=32且能被8整除,那么按照 ...

不是这样啦,应该是16,64位的机子跑32位的程序相当于32位的机子跑32位的程序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-15 14:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表