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

问题描述 投票:2回答:1

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

char A[5] = {"Hello"};

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

c++ c arrays size
1个回答
7
投票

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

它使用C进行编译,因为语言6.7.9 / 14具有一个奇怪的特殊规则/语言错误,请特别注意:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.