我沒有得到任何錯誤,當我鍵入將價值分配到字符數組
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不分配?是因爲語言是故意寫的,還是我錯過了一個觀點?
這樣做,正如我上面註釋的C++的方式,是使用std::string
而不是char[]
。這會給你你期望的任務行爲。
也就是說,你只能得到一個錯誤的第二種情況的原因是,在這兩條線的=
意味着不同的事情:
char a[10] = "Hi";
a = "Hi";
首先是初始化,第二個是一個賦值。
第一行在堆棧上分配足夠的空間以容納10個字符,並將這些字符的前三個字符初始化爲'H','i'和'\ 0'。從這一點開始,所有a
確實指的是數組在棧上的位置。由於陣列只是堆棧中的一個地方,因此決不允許更改a
。如果你想在棧上的不同位置保存不同的值,你需要一個不同的變量。
另一方面,第二條(無效)行嘗試更改a
以引用(技術上不同)"Hi"
的咒語。由於上述原因,這是不允許的。一旦你有一個初始化數組,你可以用它做的唯一事情就是從它讀取數值併爲其寫入數值。您無法更改其位置或大小。這是一個任務在這種情況下會嘗試做的事情。
你介意包括你可以使用' std :: string'並得到OP想要的行爲?我認爲這將是一個很好的答案。 – NathanOliver 2016-03-11 16:25:45
是的,我通常會嘗試給出兩層答案,像這樣的問題(一個是直接的,另一個是猜測意圖)。既然提問者已經看到我的評論,並且這個線程被關閉爲愚蠢,我想我沒有打擾。 – Cogwheel 2016-03-11 17:29:28
a是指向數組的指針,而不是數組本身。它不能被重新分配。
您使用C++ BTW標記了。對於這種情況,最好使用std :: string。這可能更多你所期望的。
'a'是數組本身,而不是指向數組的指針。它*可以*被隱式轉換爲指向第一個元素的指針。 – 2013-02-16 22:48:18
該語言不允許將字符串文字分配給字符數組。您應該使用strcpy()
代替:
strcpy(a, "Hi");
正確 - 對於這種情況,你應該使用'strcpy'。忘記你甚至聽說過'strncpy'可能根本不會有什麼損失 - 它幾乎和'gets'一樣沒用。 – 2013-02-17 00:37:21
相關['strcpy'和'strcpy_s'之間的區別?](http://stackoverflow.com/questions/32136185/difference-between-strcpy-and-strcpy-s) – 2017-03-03 05:45:03
數組是不是一個修改的左值
使用
char a[10];
strcpy(a, "Hi");
簡單的來說,
char a[10] = "Hi";
是一點 「額外功能」,因爲在運行時不能這樣做。
但這就是C/C++標準庫的原因。
#include <string.h>
// ...
strcpy(a,"Test"); // STR-ing C-o-PY.
這來自C的標準庫。如果使用C++,你應該使用std :: string,除非你真的想從你的目標PC中獲取所有可能的性能。
這是因爲初始化不是一個賦值。第一件作品是一個初始化,第二件作品並不像預期的那樣工作。你只是不能將值分配給你應該使用的數組......像strcpy
或memcpy
。或者您也可以使用std::copy
從<algorithm>
它很簡單,(=)有兩個不同的平均賦值和初始化。你也可以寫你的代碼一樣,
#include <iostream>
using namespace std;
int main()
{
char message[3] = {'H', 'i', '\0'};
cout << message<< endl;
return 0;
}
在此代碼,你有沒有需要編寫一個困難的代碼或功能,甚至無需string.h中
對於響應的:由於這是標記C++,是在處理'char []'的時候有一個*非* -strcpy「更多的C++」方法來做到這一點? – 2013-02-16 22:56:14
「更多的C++方式」是使用字符串或矢量而不是char []。通過使用char [],你基本上接受了與之相關的所有C-ness。 –
Cogwheel
2013-02-16 23:07:54
感謝您的回覆傢伙。 – 2013-02-16 23:15:40