关于字符串的问题

fzc115100 2010-11-05 03:07:07
const char string[] = {"aa\0"};
const char string[] = "aa";
以上两句有没有区别?那么第一句那个\0,是否画蛇添足?

char string[] = {"aa\0"};
char string[] = "aa";
以上两句有没有区别?那么第一句那个\0,是否画蛇添足?

谢谢!
...全文
124 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tracyjk 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhutianjin4355255 的回复:]
引用 7 楼 we_sky2008 的回复:
明显不一样,楼主可以用sizeof(string)实测其大小:

C/C++ code

const char string[] = {"aa\0"};//string[] = {'a', 'a', '\0', '\0'}; 有四个元素
const char string[] = "aa";//string[] = {'a', 'a', '……
[/Quote]
+1
赵4老师 2010-11-05
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
elegant87 2010-11-05
  • 打赏
  • 举报
回复
const char string[] = {"aa\0"};
const char string[] = "aa";
以上两句有没有区别?那么第一句那个\0,是否画蛇添足?
输出的内容是一样的
因为C语言中字符串是一\0为结束符的
自动添加的
针对第一个系统自动添加一个\0变成"aa\0\0";
fzc115100 2010-11-05
  • 打赏
  • 举报
回复
谢谢大家,没想到这么快就这么多回复了。
其实我想问的就是:const char string[] = {"aa"}和
const char string[] = "aa"
有没有区别。
答案已经揭晓,没有区别。
我在一本书上(还是外国人写的。。。)看到const char string[] = {"aa\0"}。。。这书不咋地啊!!

以上,
谢谢大家!
分不够啊,加到90分吧!

zhutianjin4355255 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 we_sky2008 的回复:]
明显不一样,楼主可以用sizeof(string)实测其大小:

C/C++ code

const char string[] = {"aa\0"};//string[] = {'a', 'a', '\0', '\0'}; 有四个元素
const char string[] = "aa";//string[] = {'a', 'a', '\0'}; 有三个元素
[/Quote]

除了用sizeof计算长度不一样,其它都一样
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 werldsfkwojrekjvkxcv 的回复:]
\0有加没加没有区别
const是表示里面的内容不能再改了, 所以前面两句使用string[0]='c'就不行了
[/Quote]

不好意思, 说错了, 纠正一下
\0有加没加是有区别的, 不过正常使用中关系不大

const char string[] = {"aa\0"};开辟的内存长度为4, 最后两位都为0
const char string[] = "aa";开辟的内存长度为3, 最后一位为0
we_sky2008 2010-11-05
  • 打赏
  • 举报
回复
明显不一样,楼主可以用sizeof(string)实测其大小:

const char string[] = {"aa\0"};//string[] = {'a', 'a', '\0', '\0'}; 有四个元素
const char string[] = "aa";//string[] = {'a', 'a', '\0'}; 有三个元素
luciferisnotsatan 2010-11-05
  • 打赏
  • 举报
回复
\0加不加都一样
walkersfaint 2010-11-05
  • 打赏
  • 举报
回复
\0是系统自动给你加上的
  • 打赏
  • 举报
回复
\0有加没加没有区别
const是表示里面的内容不能再改了, 所以前面两句使用string[0]='c'就不行了
MrEdifier 2010-11-05
  • 打赏
  • 举报
回复
等高人解答。
morgan_xww 2010-11-05
  • 打赏
  • 举报
回复
呵呵, 一样
btbb1989 2010-11-05
  • 打赏
  • 举报
回复
呵呵 没有区别啊 的确是画蛇添足 即使你不加那个\0系统会自动帮你加的

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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