当前位置:  开发笔记 > 编程语言 > 正文

C字符串初始值设定项不包含终结符?

如何解决《C字符串初始值设定项不包含终结符?》经验,为你挑选了2个好方法。

我对以下C代码片段感到有些困惑:

printf("Peter string is %d bytes\n", sizeof("Peter")); // Peter string is 6 bytes

这告诉我,当C用双引号编译一个字符串时,它会自动为空终止符添加一个额外的字节.

printf("Hello '%s'\n", "Peter");

printf函数知道何时停止读取字符串"Peter",因为它到达空终止符,所以......

char myString[2][9] = {"123456789", "123456789" };
printf("myString: %s\n", myString[0]);

在这里,printf打印所有18个字符,因为没有空终止符(并且它们不适合不取出9).C不在变量定义中添加空终止符吗?



1> 小智..:

你的字符串是[2] [9].那些[9]是['1','2'等等......'8','9'].因为你只在第一个数组维度中为9个字符提供了空间,并且因为你使用了全部9个字符,所以没有空间放置'\ 0'字符.重新定义你的char数组:

char string[2][10] = {"123456789", "123456789"};

它应该工作.



2> Sean Bright..:

当然可以,你只是没有为'\ 0'字节留下足够的空间.进行中:

char string[2][10] = { "123456789", "123456789" };

将按预期工作(将只打印9个字符).

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有