博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
没有'\0'标记的字符串输出会是怎样的呢?
阅读量:5332 次
发布时间:2019-06-14

本文共 944 字,大约阅读时间需要 3 分钟。

我们都知道:

定义一个字符数组:

char a[]="zhong";

a数组的大小应该为:sizeof(a)=5+1.这个字符数组大小其实是6个字节。因为系统默认分配多了一个'\0'在zhong的后面,所以在内存里a对应的那5个内存单元是:

'z' 'h' 'o' 'n' 'g' 'x'' i ' a' 'o' 'm' 'i' 'n' 'g' '\0'。

可是,如果这样子定义呢?

char a[5]="zhong";

那么如果把a数组以字符串形式输出会是怎么样呢?

答案很多时候都是:

zhong

为什么?下面再看一个例子:

char b[]="ABC",a[5]="zhong",c[]="DEF";printf("%s\n",a);
这样的输出又是什么呢?

Love-Yan:pointertest MD101$ gcc string.c -gLove-Yan:pointertest MD101$ ./a.outzhongxiaomingABC
Breakpoint 1, main () at string.c:66		char b[]="ABC",a[13]="zhongxiaoming",c[]="DEF";(gdb) s 7		printf("%s\n",a);(gdb) p b$1 = "ABC"(gdb) p &b$2 = (char (*)[4]) 0x7fff5fbffbac(gdb) p a$3 = "zhongxiaoming"(gdb) p &a$4 = (char (*)[13]) 0x7fff5fbffb9f(gdb) p c$5 = "DEF"(gdb) p &c$6 = (char (*)[4]) 0x7fff5fbffb9b(gdb) p sizeof(a)$7 = 13(gdb)
如上面gdb罗列出来的a、b、c变量的地址,可以看出他们在内存里是按照地址递减的方式分配空间的。系统在把a变量内容以字符串形式输出时,则会在:

0x7fff5fbffb9f这个地址开始输出字符,一直遇到'\0'方停止。所以才会输出这样的内容。

转载于:https://www.cnblogs.com/iosDevZhong/p/4395241.html

你可能感兴趣的文章
BZOJ 2243: [SDOI2011]染色( 树链剖分 )
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>
c++中的string常用函数用法总结!
查看>>
界面交互之支付宝生活圈pk微信朋友圈
查看>>
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>
SuperMap iServerJava 6R扩展领域开发及压力测试---判断点在那个面内(1)
查看>>
Week03-面向对象入门
查看>>
一个控制台程序,模拟机器人对话
查看>>
web.xml 中加载顺序
查看>>
pycharm激活地址
查看>>
hdu 1207 四柱汉诺塔
查看>>
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)
查看>>
display:none与visible:hidden的区别
查看>>
我的PHP学习之路
查看>>
【题解】luogu p2340 奶牛会展
查看>>
对PostgreSQL的 SPI_prepare 的理解。
查看>>
解决响应式布局下兼容性的问题
查看>>
京东静态网页练习记录
查看>>
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>