在我的C++书中,有一个两页的C风格字符字符串(它几乎没有意义,因为它两次告诉我们C++程序员不应该使用C风格的字符串),但我感到困惑的是is..what之间的区别:
char ca[] = {'C', 'a', 't'};和
char ca[] = "cat";对于第一个,它说它可能有“灾难性”的结果,因为c样式的字符串必须为空终止。但是第二个不是也是c样式的字符串吗?为什么我不用键入"cat\0“之类的东西?难道这不也会导致“灾难性的后果”吗?
发布于 2013-09-16 04:39:50
第二个等价于
char ca[] = {'c', 'a', 't', '\0'}注意第一个示例中缺少的终止NUL字符。
您不必键入"cat\0",因为编译器在使用字符串文字初始化数组时会自动添加NUL字符。这是规矩。
发布于 2013-09-16 04:41:20
C样式字符串必须终止为null,因为许多算法都查找null。如果永远找不到null,像字符串复制之类的事情可能永远不会结束。
char ca[] = "cat";
char ca2[] = {'C', 'a', 't', '\0'};ca和ca2是完全相同的。至于为什么不需要键入"cat\0“或类似的东西,这是因为这是一种非常常见的模式,语言制造者定义了双引号字符串的含义,以便隐式地包含空值。只是一件方便的事
发布于 2013-09-16 04:41:30
C样式的字符串以空结尾,因此在数组的末尾有一个填充\0:
char ca[] = "cat";与以下相同:
char ca[] = {'c', 'a', 't', '\0'};请再次注意,这个数组有4个元素。
https://stackoverflow.com/questions/18820499
复制相似问题