Chinaunix首页 | 论坛 | 博客
  • 博客访问: 175163
  • 博文数量: 49
  • 博客积分: 2802
  • 博客等级: 大尉
  • 技术积分: 502
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-25 12:02
个人简介

来就来吧

文章分类

全部博文(49)

文章存档

2014年(1)

2012年(1)

2011年(11)

2010年(26)

2009年(10)

分类: C/C++

2009-12-23 16:25:42

#include
#include
void  f(char *p)
{
    char *s;
    s= p;
    *s=1;     ///
    printf("%s\n", p);
}

int main()
{
    char buf[10] = {0};
    f(buf);
    printf("%s\n", buf);
}
 
我开始一直以为会输出2个1.
结果是没有的。
我用gdb调试了也是有值的。(gdb -g -o t t.c)
gdb调试:
Breakpoint 1, f (p=0xbfd3001a "") at 1.c:8
8           s= p;
(gdb) p p
$7 = 0xbfd3001a ""
(gdb) n
9           *s=1;
(gdb) n
10          printf("%s\n", p);
(gdb) p s
$8 = 0xbfd3001a "\001"
(gdb)  p p
$9 = 0xbfd3001a "\001"    //此处可以看出有值了
(gdb) n
12      }
(gdb) n
main () at 1.c:19
19          printf("%s\n", buf);
(gdb) p buf
$10 = "\001\000\000\000\000\000\000\000\000"    //此处可以看出有值了
(gdb) c
Continuing.
 
纳闷。
 
 
最后发现我填入的值是ascii 码。晕死。也怪自己太笨。gdb中显示的明显是ascii码哦。
 
*s=1;     ///
*s=‘1’;     ///
阅读(551) | 评论(0) | 转发(0) |
0

上一篇:数组a 与 &a

下一篇:ip数据包头长度

给主人留下些什么吧!~~