首页
社区
课程
招聘
[讨论]请大家帮我分析一下这段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 探索篇!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 22
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看看C语言 指针的知识 就懂了
2016-9-25 18:56
0
雪    币: 817
活跃值: (2063)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
printf("%s\n",p2);

这样改一下试试看:
printf("%s\n",p2-1);
2016-9-25 19:18
0
雪    币: 115
活跃值: (23)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
4
还没看呢
2016-9-25 20:08
0
雪    币: 1753
活跃值: (840)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
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
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
*p2++=*p1++   楼主把这一句理解了    就不会有这个问题了

这句的意思是   
两个字符串指针取值 赋值    完成后 指针自身递增   (因为是字符串指针 所以递增1 )

你在接下来的语句里  输出递增后的指针   而递增后的指针指向的空间 之前被你zeromemory了     
0是做为结束符的       肯定什么都不会输出。
2016-9-26 10:48
0
游客
登录 | 注册 方可回帖
返回
//