字符串常量中有'\0'时的sizeof问题

xiaoxuhao 2005-11-29 10:26:52
#include <iostream>
#include <string>
using namespace std;

void main()
{
char a[] ="00\000\0";
cout<<sizeof(a)<<endl;
}

VC6.0下输出结果为5,
用debug观察,得

a
-[0] '0'
-[1] '0'
-[2] '0'
-[3] ''
-[4] ''

若a[] ="00\0\0\000";
则sizeof(a)为6。

百思不得其解,
望高手不吝赐教!
谢谢!
...全文
439 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ggeneral2 2006-04-26
  • 打赏
  • 举报
回复
高家庄!高!是在是高!
fiftymetre 2005-11-29
  • 打赏
  • 举报
回复
嘿嘿,表谢谢啦,跟着我叫,打倒小小雨便好:)
dragonzxh 2005-11-29
  • 打赏
  • 举报
回复
原来如此。。。理解错误。。受教啊。。。
ascmvi 2005-11-29
  • 打赏
  • 举报
回复
mark
xiaoxuhao 2005-11-29
  • 打赏
  • 举报
回复
多谢fiftymetre!
高人呀,:)
结贴啦!
xiaoxuhao 2005-11-29
  • 打赏
  • 举报
回复
啊,是这样的呀!
我来试试!
xiaoxuhao 2005-11-29
  • 打赏
  • 举报
回复
'\00'是什么意思?
fiftymetre 2005-11-29
  • 打赏
  • 举报
回复
\后面的转意,是取连续的三个字符的,而不是只取紧邻的一个字符
因此

"00\000\0"
会被看成 0,0,\000, \0, 因为用双引号的缘故,最后会补一个'\0'
因此也就是0,0,0,0,0,大小是5

而"00\0\0\000",同样分解为
0, 0, \0, \0, \000五个字符,补一个'\0',变成了6个

sinall 2005-11-29
  • 打赏
  • 举报
回复
若a[] ="00\0\0\000";
则sizeof(a)为6。
——
'0','0','\0','\0','\00','0'
显然是6个嘛。
xiaoxuhao 2005-11-29
  • 打赏
  • 举报
回复
我知道strlen()和sizeof的区别,问题的关键是用这样的字符串常量初始化字符数组a时,编译器如何给a分配空间,分配多大的空间的问题,呵呵。
xiaoxuhao 2005-11-29
  • 打赏
  • 举报
回复
如果a替换成"00000\0",debug,得:
a
-[0] '0'
-[1] '0'
-[2] '0'
-[3] '0'
-[4] '0'
-[5] ''
-[6] ''

说明"00\000\0"和"00000\0"还是不一样的吧。
wohow 2005-11-29
  • 打赏
  • 举报
回复
把sizeof(a)和strlen(a)搞混了
dragonzxh 2005-11-29
  • 打赏
  • 举报
回复
\0就是0,最后一个0看做结束符,char a[] ="00\000\0"; 就是"00000\0"

a[] ="00\0\0\000";就是"000000\0"

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧