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 许可协议

阅读 784
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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题