char c[5]="abcde";
char* p = c;
p=p+2;
*p=0;
printf("c[0]=%c,c[1]=%c,c[2]=%c,c[3]=%c,c[4]=%c\n",c[0],c[1],c[2],c[3],c[4]);
printf("main:%s\n",c);
fputs(c,stdout);
输出:
c[0]=a,c[1]=b,c[2]=^@,c[3]=d,c[4]=e
main:ab
ab
可以看到在 p=p+2, * p= 0 后,指针 p 已经成功将 c[2]项释放,但 c[2]之后的 c[3],c[4]仍然没有被改变,
然而此时无论用 printf 还是 fputs 输出字符串 c,为何都只能输出 ab,而不是 ab^@de ?
先谢各位大佬指点!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.