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