为什么C ++需要6个大小的数组来存储5个字母的单词,而C仅允许5个单词?

Pra*_*han 2 c c++ arrays size

我已经在C和C ++中尝试了以下语句。

char A[5] = {"Hello"};
Run Code Online (Sandbox Code Playgroud)

当C接受这一点时,C ++会抛出一个错误,指出字符串太长。如果要添加一个空字符,为什么它在C中被接受但在C ++中不被接受?

Lun*_*din 8

请注意,这char A[5]={"Hello"};是两种语言的错误。必须有空间分配空终止符。

它之所以用C进行编译是因为语言6.7.9 / 14有一个奇怪的特殊规则/语言错误,重点是我的:

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

这允许使用字符串文字初始化字符数组,该字符串文字的字符数与数组大小完全相同,但是会静默丢弃空终止符。

C ++修复了此危险的语言错误。

  • @Aconcagua我认为6.7.9 / 2隐式禁止:“没有初始化程序将尝试为未包含在正在初始化的实体中的对象提供值。” (3认同)