gpt4 book ai didi

c++ - 字符四 [4] = "four";该语句的正确语义是什么?

转载 作者:可可西里 更新时间:2023-11-01 18:03:43 25 4
gpt4 key购买 nike

int main(void)
{
char four[4] = "four";
return 0;
}

当编译为 C++ 程序时,G++ 报告

xxx.cpp: In function int main():

xxx.cpp:3: 错误:字符数组的初始化字符串太长

当编译一个 C 程序时,GCC 没有报错。

在我看来,赋值正确地将所有 4 个字节复制到变量中,正如我预期的那样。

所以我的问题归结为......

在 C 中观察到的行为是否正确,或者我是否在某处触及未定义的行为,还是完全不同?

最佳答案

简短回答:您的代码是有效的 C,但不是有效的 C++。

长答案:

"four" 实际上是 5 个字符长 - 为您添加了一个 \0。在 6.7.8 初始化 部分的第 13 段中,C 标准说:

An array of character type may be initialized by a character string literal, optionally enclosed in braces. Successive characters of the character string literal (including the terminating null character if there is room or if the array is of unknown size) initialize the elements of the array.

所以 \0 在编译为 C 时在程序中被忽略。C++ 以不同的方式对待它。事实上,这种特殊情况在 C++ 规范(8.5.2 字符数组 部分,第 2 段)中被明确调用:

There shall not be more initializers than there are array elements. [ Example:

char cv[4] = "asdf";  // error

is ill-formed since there is no space for the implied trailing ’\0’. — end example ]

关于c++ - 字符四 [4] = "four";该语句的正确语义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3524053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com