首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C型字符串

问C型字符串
EN

Stack Overflow用户
提问于 2013-09-16 04:38:40
回答 4查看 162关注 0票数 1

在我的C++书中,有一个两页的C风格字符字符串(它几乎没有意义,因为它两次告诉我们C++程序员不应该使用C风格的字符串),但我感到困惑的是is..what之间的区别:

代码语言:javascript
复制
char ca[] = {'C', 'a', 't'};

和

代码语言:javascript
复制
char ca[] = "cat";

对于第一个,它说它可能有“灾难性”的结果,因为c样式的字符串必须为空终止。但是第二个不是也是c样式的字符串吗?为什么我不用键入"cat\0“之类的东西?难道这不也会导致“灾难性的后果”吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-16 04:39:50

第二个等价于

代码语言:javascript
复制
char ca[] = {'c', 'a', 't', '\0'}

注意第一个示例中缺少的终止NUL字符。

您不必键入"cat\0",因为编译器在使用字符串文字初始化数组时会自动添加NUL字符。这是规矩。

票数 5
EN

Stack Overflow用户

发布于 2013-09-16 04:41:20

C样式字符串必须终止为null,因为许多算法都查找null。如果永远找不到null,像字符串复制之类的事情可能永远不会结束。

代码语言:javascript
复制
char ca[] = "cat";
char ca2[] = {'C', 'a', 't', '\0'};

ca和ca2是完全相同的。至于为什么不需要键入"cat\0“或类似的东西,这是因为这是一种非常常见的模式,语言制造者定义了双引号字符串的含义,以便隐式地包含空值。只是一件方便的事

票数 1
EN

Stack Overflow用户

发布于 2013-09-16 04:41:30

C样式的字符串以空结尾,因此在数组的末尾有一个填充\0:

代码语言:javascript
复制
char ca[] = "cat";

与以下相同:

代码语言:javascript
复制
char ca[] = {'c', 'a', 't', '\0'};

请再次注意,这个数组有4个元素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18820499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档