首页 > 解决方案 > 当使用大于其大小的数据初始化字符数组时,究竟会发生什么?

问题描述

标签: carrayscharinitializationstring-literals

解决方案


编译器将发出错误,因为初始化器的数量多于数组元素的数量,并且冗余初始化器不是字符串文字的终止零。

来自 C 标准(6.7.9 初始化)

2 任何初始化器都不应尝试为未包含在被初始化实体中的对象提供值。

如果字符数组没有对应的元素,则可以从初始化程序中排除字符串文字的终止零时,此规则的一个排除项是关于字符数组。

14 字符类型数组可以由字符串文字或 UTF-8 字符串文字初始化,可选用大括号括起来。字符串文字的连续字节(如果有空间或数组大小未知,则包括终止的空字符)初始化数组的元素。

如果程序已运行,则它具有未定义的行为。字符数组不包含使用转换说明符 %s 时所需的字符串。


推荐阅读