C/C 将 char 数组初始化为 const char\*

新手上路,请多包涵

假设我有一个 char 数组,这没关系:

 char myChars[100] = "hello";

但如果我有一个

const char* hello="hello";
char myChars[100] = hello;

或者

const char hello[6]="hello";
char myChars[100] = hello;

这不被允许:

 error: array must be initialized with a brace-enclosed intializer

在我看来,这些基本上是等效的陈述,为什么会这样?

原文由 jdex 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 915
2 个回答

因为指针不是数组,数组也不是指针。

这些例子并不等同;字符串文字 "hello" 不是指针,而是 const char[6] ,可用于初始化您的 char myChars[100] 作为特殊情况。

但是,如果您首先使其衰减为指针,则以后无法再恢复该数组。在一般情况下,编译器无法知道数组有多大,或者它甚至是一个。因此,从指针初始化数组是无效的,无论之前发生了什么。

原文由 Lightness Races in Orbit 发布,翻译遵循 CC BY-SA 3.0 许可协议

您需要区分 指针 和 _数组_。

下面定义了一个指向常量文本的指针:

const char* hello="hello";

下面定义了一个数组:

char myChars[100];

您正在尝试将指针分配给数组的单个插槽:

char myChars[100] = hello;

你最好的选择是使用 std::string

在嵌入式编程中,我经常使用:

static const char hello_text[] = "Hello";

我让编译器确定数组的大小。

原文由 Thomas Matthews 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题