为char数组赋值

时间:2013-02-16 22:43:16

标签: c++

键入

时没有错误
char a[10] = "Hi";

但是当我将其更改为以下内容时,我收到错误:Array type char is not assignable.

char a[10];
a = "Hi";

为什么数组类型char不可分配?是因为语言是故意编写的,还是我错过了一点?

7 个答案:

答案 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)

这是因为初始化不是赋值。第一件工作是初始化,而第二件工作,如预期的那样无效,就是赋值。你只是不能为数组赋值,你应该使用strcpymemcpy。或者您也可以使用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