首页
社区
课程
招聘
[旧帖] [讨论]VC6下一个问题 0.00雪花
发表于: 2013-10-30 20:08 1402

[旧帖] [讨论]VC6下一个问题 0.00雪花

2013-10-30 20:08
1402
本来是捣鼓url编码的,无意发现这件怪事。(是不是又有高手说,这小子才研究url编码啊?)。。

先看程序写结果吧。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str1[] = "好";
char str2[2];
memset(str2, 0, 6);
printf("%d\n%s\n",strlen(str1),str1);
return 0;
}

答案:
0
(注:此处空行)
Press any key to continue

把printf和memset()换个位子,才行:
2

Press any key to continue

不知为何,尽管str1和str2的内存是连着的——但是就是想不通,谁能解释下?
str2我根本没动啊。且在第一种情况下,str2为空。

我的“好”呢???

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 10072
活跃值: (2963)
能力值: ( LV15,RANK:515 )
在线值:
发帖
回帖
粉丝
2
char str1[] = "好";
char str2[2];
memset(str2, 0, 6);//这里已经访问数组越界了
就是因为str1和str2连续,而str2只有两个字节,你去memset 6个字节,不把str1的值清零才怪
2013-10-30 21:34
0
雪    币: 1030
活跃值: (36)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
我只是来睡一下的
2013-10-30 21:56
0
雪    币: 80
活跃值: (109)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
str2不应该在str1后面吗?
2013-10-31 13:10
0
雪    币: 17
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
溢出了,memset(str2, 0, 6);把str1也清零了
2013-10-31 13:15
0
雪    币: 80
活跃值: (109)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
就是说,在内存中str2不应该在str1后吗?
2013-10-31 18:50
0
雪    币: 25
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
在代码中str2在str1的后面,所以str1先在堆栈上开辟空间,str2次之,所以str2应该在地址上应该比str1要低的位置,越界memset str2之后就把str1给清掉了
2013-10-31 19:05
0
游客
登录 | 注册 方可回帖
返回
//