错误

574阅读 0评论2009-12-23 zhxw123
分类:C/C++

#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’;     ///
上一篇:数组a 与 &a
下一篇:ip数据包头长度