You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中无空终止符字符数组:指定大小是否合法?

字符数组用字符串字面量初始化时省略空终止符的合法性

这种写法是完全合法的C代码,不会触发未定义行为,具体说明如下:

  • C标准明确规定:当使用字符串字面量初始化字符数组时,如果数组的指定大小恰好等于字符串字面量中字符的数量(不含默认的空终止符),编译器会仅将字符串里的字符依次复制到数组中,不会额外添加空终止符。这种初始化方式是标准允许的合规操作。

  • 针对给出的两个示例:

    1. char no_term[5] = "hello";:字符串"hello"包含5个字符,数组大小指定为5,因此数组会被初始化为{'h','e','l','l','o'},不存在空终止符,初始化过程完全合法。
    2. char no_term_array[3][3] = {"foo", "bar", "baz"};:每个子数组大小为3,对应的字符串字面量"foo"、"bar"、"baz"各含3个字符,每个子数组会被分别初始化为对应的3个字符,同样不会添加空终止符,代码合法。
  • 注意事项:只要不将这些数组作为依赖空终止符的C风格字符串使用(比如传入strlen()、strcat()这类函数),仅在已知长度的场景(如memcpy()、直接访问数组元素)下操作,就不会有任何问题。

内容的提问来源于stack exchange,提问作者CPlus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:52:07