我知道如何用两种不同的方式在 C 语言中初始化字符串。
char str[] = "abcd";
char str[] = {'a','b','c','d','\0' };
清楚地写 "abcd"
而不是 {'a','b','c','d','\0' }
可以节省时间并且舒服。
是否有任何特殊原因我们可以像最后一行那样初始化字符串?它在某些情况下有用还是多余?
最佳答案
一般来说,没有区别。除了一些高级异常(exception),如下...
在某些情况下,您需要一个不是有效 C 字符串的字符数组 - 也就是说,不是以 null 结尾。那么必须使用后一种形式。不过,只有一些非常特殊的情况需要这样的字符串:非常古老的 Unix 代码和某些嵌入式系统实现。
后一种形式的另一个优点是更好的转义序列。字符串文字的转义序列有点损坏。假设我想打印一个代码为 0xAA 的扩展符号,然后是字符串“ABBA”。
puts("\xAAABBA");
不会编译,因为它将\x
后面的所有内容都作为十六进制。char str[] = {'\xAA','A','B','B','A','\0'}; puts(str);
虽然工作正常。 (然而,您也可以将字符串文字拆分为多个,以实现相同的效果:"\xAA""ABBA"
。)使用字符串字面值进行初始化也存在此处讨论的微妙但严重的 C 语言缺陷:
Inconsistent gcc diagnostic for string initialization
关于c - 在C中初始化字符串;以下有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69083397/