6

通常在 中C++,字符数组按以下方式初始化,

char example[5]="cat";

如果你用""(只是一个没有空格的双引号)初始化它怎么办?
初始化后字符数组中的元素是什么?

4

4 回答 4

12

宣言

char    temp[3] = "";

char    temp[3] = {0};
                  // `\0` ascii value is 0

记住用 初始化的半初始化数组的剩余元素0

点:char temp[3] = ""容易type意味着写作),所以它更可取。

甚至将其与此声明进行比较char temp[3] = {'\0'}; (它需要更多字符type)而 inchar temp[3] = ""; 很简单(即使没有类型不匹配 - int/char)。

于 2013-07-22T14:30:04.100 回答
9

这是一个初始化为三个空字符的 3 字符数组。

编辑(在下面的评论之后):

来自 K&R:

如果数组的初始值设定项少于指定数量,则外部、静态和自动变量的缺失元素将为零。

...

字符数组是初始化的一种特殊情况;可以使用字符串代替大括号和逗号表示法:

字符模式[] = "旧";

是更长但等效的简写

字符模式[] = { 'o', 'u', 'l', 'd', '\0' };

来自C++ 标准的草稿副本,第 8.5.2 节,字符数组

"1. 一个 char 数组(无论是普通字符、有符号字符还是无符号字符)、char16_t 数组、char32_t 数组或 wchar_t 数组可以由窄字符文字、char16_t 字符串文字、char32_t 字符串文字或宽字符串文字进行初始化,分别地,或通过括号括起来的适当类型的字符串文字。字符串文字值的连续字符初始化数组的元素。[示例:

char msg[] = "第 %s 行语法错误\n";

显示一个字符数组,其成员使用字符串文字进行初始化。请注意,因为 '\n' 是单个字符,并且因为附加了尾随 '\0',所以 sizeof(msg) 为 25。 — 结束示例]

...

“3. 如果初始化器的数量少于数组元素的数量,则每个未显式初始化的元素都应进行零初始化 (8.5)。”

于 2013-07-22T14:29:52.530 回答
2

一个空字符串。第一个字符将是空终止符。经过实验,似乎剩余的字符设置为 0(这也是空终止符)。

于 2013-07-22T14:29:32.003 回答
1

您将第一个元素设置为空终止字符。其他元素部分初始化为零:C 和 C++:自动结构的部分初始化

于 2013-07-22T14:30:13.987 回答