C 样式字符串
C-style Character Strings
在我的C++书中,有一个两页的C风格字符串部分(这似乎毫无意义,因为它两次告诉我们C++程序员不应该使用C风格的字符串),但我感到困惑的一件事是。两者之间有什么区别:
char ca[] = {'C', 'a', 't'};
和
char ca[] = "cat";
对于第一个,它说它可能会产生"灾难性"的结果,因为 c 样式的字符串必须以 null 结尾。但是第二个不也是 c 样式的字符串吗?为什么我不必输入"cat\0"或类似的东西?这难道不应该也导致"灾难性的后果"吗?
第二个等效于
char ca[] = {'c', 'a', 't', ' '}
请注意终止NUL
字符,在第一个示例中不存在。
不必键入"cat "
因为编译器在使用字符串文本初始化数组时会自动添加NUL
字符。他们就是规则。
C 样式字符串必须以 null 结尾,因为许多算法会查找 null。 如果字符串复制之类的内容从未找到 null,则可能永远不会结束。
char ca[] = "cat";
char ca2[] = {'C', 'a', 't', ' '};
ca
和ca2
是相同的。 至于为什么你不必输入"cat\0"或类似的东西,这是因为这是一种非常常见的模式,语言制造商定义了双引号字符串的含义,以隐式包含 null。 这只是一个方便的事情
C 样式字符串以 null 结尾,因此数组末尾有一个填充