C语言中字符串如何终止?char数组初始化时\0的相关疑问
C语言字符串终止符常见问题解答
问题1:char a[5]="abcd\n" 中\0的位置?
字符串字面量 "abcd\n" 包含'a'、'b'、'c'、'd'、'\n'共5个字符,你声明的数组a大小刚好为5,编译器会直接把这5个字符填充到数组中,不会额外添加\0终止符。此时a只是普通字符数组,不是C标准定义的“字符串”——因为它缺少\0结尾。
问题2:用char[]存储字符串时,是否必须预留位置给\0?
分两种场景:
- 如果需要把数组当作标准C字符串使用(比如传给
strlen、printf("%s")这类依赖\0识别结尾的库函数),那必须预留至少一个字节给\0。否则这些函数会越界读取内存,直到随机遇到\0,引发未定义行为。 - 如果只是用数组存储一组字符,不需要依赖
\0判断长度(比如自己通过下标逐个访问),那完全不需要预留\0的位置。
内容的提问来源于stack exchange,提问作者cy10
相关产品推荐
相关产品推荐

