键入
时没有错误char a[10] = "Hi";
但是当我将其更改为以下内容时,我收到错误:Array type char is not assignable.
char a[10];
a = "Hi";
为什么数组类型char不可分配?是因为语言是故意编写的,还是我错过了一点?
答案 0 :(得分:18)
数组不是可修改的左值
使用
char a[10];
strcpy(a, "Hi");
答案 1 :(得分:13)
正如我上面评论的那样,C ++的方法是使用std::string
而不是char[]
。这将为您提供您期望的作业行为。
那就是说,你在第二种情况下只得到一个错误的原因是这两行中的=
意味着不同的东西:
char a[10] = "Hi";
a = "Hi";
第一个是初始化,第二个是赋值。
第一行在堆栈上分配足够的空间以容纳10个字符,并将前三个字符初始化为“H”,“i”和“\ 0”。从这一点开始,所有a
都指的是数组在堆栈上的位置。因为数组只是堆栈中的一个位置,所以永远不允许更改a
。如果您希望堆栈上的其他位置保持不同的值,则需要一个不同的变量。
另一方面,第二行(无效)尝试更改a
以引用"Hi"
的(技术上不同的)咒语。由于上述原因,这是不允许的。一旦你有了一个初始化的数组,你唯一可以做的就是从中读取值并将值写入它。您无法更改其位置或大小。在这种情况下,这就是作业所要做的。
答案 2 :(得分:10)
该语言不允许将字符串文字分配给字符数组。您应该使用strcpy()
代替:
strcpy(a, "Hi");
答案 3 :(得分:2)
a是指向数组的指针,而不是数组本身。它无法重新分配。
您使用C ++ BTW进行了标记。对于那种情况,最好使用std :: string。它可能更符合您的期望。
答案 4 :(得分:0)
简单,
char a[10] = "Hi";
是一个“额外功能”,因为它不能像在运行时那样完成。
但这就是C / C ++标准库的原因。
#include <string.h>
// ...
strcpy(a,"Test"); // STR-ing C-o-PY.
这来自C的标准库。如果使用C ++,你应该使用std :: string,除非你真的想要从你的目标PC中获取所有可能的性能。
答案 5 :(得分:0)
这是因为初始化不是赋值。第一件工作是初始化,而第二件工作,如预期的那样无效,就是赋值。你只是不能为数组赋值,你应该使用strcpy
或memcpy
。或者您也可以使用std::copy
<algorithm>
答案 6 :(得分:-2)
这很简单,(=)有两种不同的均值分配和初始化。您也可以像这样编写代码
#include <iostream>
using namespace std;
int main ()
{
char message[3] = {'H', 'i', '\0'};
cout << message<< endl;
return 0;
}
在这段代码中你不需要编写一个困难的代码或函数,甚至不需要string.h