#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) |