首页
课程
问答
CTF
社区
招聘
看雪峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
看雪峰会
看雪商城
证书查询
社区
编程技术
发新帖
1
0
[讨论]请大家帮我分析一下这段C code,菜鸟不是很清楚,谢谢!
发表于: 2016-9-25 15:48
3522
[讨论]请大家帮我分析一下这段C code,菜鸟不是很清楚,谢谢!
我是谁!
2016-9-25 15:48
3522
void main()
{
char *p1="name";
char *p2;
p2=(char *)malloc(20);
memset(p2,0,20);
while(*p2++=*p1++)
printf("%s\n",p2);
}
[课程]Linux pwn 探索篇!
收藏
・
1
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
最新回复
(
5
)
靴子
雪 币:
22
活跃值:
(423)
能力值:
( LV2,RANK:10 )
在线值:
发帖
19
回帖
524
粉丝
1
关注
私信
靴子
2
楼
看看C语言 指针的知识 就懂了
2016-9-25 18:56
0
老伙计
雪 币:
817
活跃值:
(2063)
能力值:
( LV2,RANK:10 )
在线值:
发帖
21
回帖
605
粉丝
11
关注
私信
老伙计
3
楼
printf("%s\n",p2);
这样改一下试试看:
printf("%s\n",p2-1);
2016-9-25 19:18
0
我是谁!
雪 币:
115
活跃值:
(23)
能力值:
(RANK:20 )
在线值:
发帖
45
回帖
420
粉丝
1
关注
私信
我是谁!
4
楼
还没看呢
2016-9-25 20:08
0
cmdxhz
雪 币:
1753
活跃值:
(840)
能力值:
( LV8,RANK:120 )
在线值:
发帖
30
回帖
291
粉丝
3
关注
私信
cmdxhz
1
5
楼
int main()
{
char *p1="name";
char *p2;
p2=(char *)malloc(20);
memset(p2,0,20);
int i=0;
while(*p2++=*p1++)
{
//printf("%s\n",p2); 这句你看不到输出,是因为在while里指针已经执行了++操作,指针位移到下一个位置了,下一个位置值是0x00
printf("%s\n",p2-1); //这样就OK了,让指针重新指回被赋值的位置
}
return 0;
}
运行结果:
root@angel-kali:~/test# g++ test.cpp -o test.exe
test.cpp: In function ‘int main()’:
test.cpp:16:12: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
char *p1="name";
^
root@angel-kali:~/test# ./test.exe
n
a
m
e
2016-9-26 10:19
0
xacker
雪 币:
522
活跃值:
(10)
能力值:
( LV4,RANK:50 )
在线值:
发帖
17
回帖
449
粉丝
0
关注
私信
xacker
1
6
楼
*p2++=*p1++ 楼主把这一句理解了 就不会有这个问题了
这句的意思是
两个字符串指针取值 赋值 完成后 指针自身递增 (因为是字符串指针 所以递增1 )
你在接下来的语句里 输出递增后的指针 而递增后的指针指向的空间 之前被你zeromemory了
0是做为结束符的 肯定什么都不会输出。
2016-9-26 10:48
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
我是谁!
45
发帖
420
回帖
20
RANK
关注
私信
他的文章
[原创]卖书
3508
[原创]路
2915
[求助]寻几个逆向交流群
3277
[求助]寻几套视频教程!
4067
[调查]做什么赚钱
3177
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
返回
顶部