将 char 数组分配给文本字符串 - C++

assign a char array to a literal string - c++

本文关键字:字符串 C++ 文本 char 数组 分配      更新时间:2023-10-16
char arr[3];
arr="hi";// ERROR
cin>>arr;// and at runtime I type hi, which works fine.

1)有人可以向我解释为什么吗?

2)究竟是什么类型的"嗨",我知道它被称为文字字符串。但它也只是一堆字符吗?

3)不是>>;就像将 arr 分配给您在运行时键入的内容一样?

C++中的数组不是实际类型,只是一系列值的结构化表示形式,如果你应该在任何地方找到它,而不是指针(它们衰减为指针)。您不能像使用其他类型的(包括分配)那样使用它们。选择是添加对数组的大量支持,或者使它们尽可能简单和快速。选择了后者,这是C++与其他一些语言的区别之一。

要复制数组,请一次复制一个元素。

在 C++11 中,有一个 STL 容器std::array。它被设计为适合一个带有运算符重载的普通数组,以及与 STL 的其余部分相关。

更好的选择是 std::string .它包含您想要的行为以及更多内容,并且专门设计用于保存字符数组。

正如康拉德·鲁道夫指出的那样,"嗨"是一种const char [3]

至于cin原始数组,通过标准方法是不可能的,因为没有为数组cin提供过载。不过,也可以创建自己的重载。但是,我不确定您将如何解释传递的不同大小的数组,除非您为知道其大小的容器而不是原始数组定义它。

如果您愿意,可以声明:

char array[] = "hi!";

创建一个数组并将其"初始化"为 4 个字节长,"嗨!

char const *array2 = "hey!";

创建指向只读内存的指针,字符串文本

array2 = array;

现在,您可以使用 array2 指针访问数组 1。这称为指针衰减;array 和 array2 不是同一类型,即使它们可以在这里合作。字符类型的数组"衰减"到字符类型的指针

array = array2; // ERROR

数组不是指针。你的想法就像一个数组是一个指针,而实际上,它是预先分配的。您正在尝试分配一个地址,但 array[] 在创建时已经有一个"硬编码",并且无法更改。