c關於字元陣列的初始化和賦值問題

2021-12-23 07:34:29 字數 3321 閱讀 1698

1樓:街角哦祝福

只有在定義的同時這樣(a[20]="what for")賦值才行,其他不行,這是c語言規定的

要先定義然後再在其他地方賦值的話,就只能乙個乙個元素單獨賦值,不過要是想達到同樣的效果(類似a[20]="what for"),對於字串陣列,可以用庫函式strcpy(...)函式賦值,其他的話,你可以自己寫函式給他們賦初值!!

2樓:

初始化和賦初值並不是一回事。初始化是由編譯器語句完成的,形成.exe檔案後那些初始化結果已經在某個地方放著,不需要再佔用執行時間了;賦初值是由c/c++語句完成的,每次啟動.

exe檔案都要執行一遍,所以要佔用**的執行時間。比如:char a[20]="what for";就是編譯器語句,編譯時編譯器把""中的8個字元乙個接乙個地存放到為char型陣列a分配的20個字元空間的前8個位置,並在第9個位置加放乙個'\0'。

c和c++都沒有提供為陣列整體賦值的功能,所以char a[20];a="what for";顯然是錯誤的。要為已經宣告過的字元型陣列a賦初值,如果要寫入的字串組成是有規律的,則可以用迴圈語句乙個乙個地賦值,如果字串的組成沒有規律,則可以用庫函式進行拷貝賦值,例如char a[20];strcpy(a,"what for");,strcpy就把what for存放在了a的前8個位元組,並在第9個位元組存乙個'\0'作為結束符。使用庫函式要包含相應的標頭檔案,strcpy在string.

h中就有。

3樓:瘋狂**

可以換個定義的方法啊

比如 char a[10] =

定義乙個初始值,然後賦值修改也是一樣的啊

4樓:匿名使用者

char [20]; a="what for"; ????錯了這樣就可以

char a[20];

a[20]="what for";

5樓:匿名使用者

直接輸入就可以了。

scanf();gets();都行啊。

6樓:扯蛋扯扯更健康

乙個對乙個賦值啊!a[0]='w';記得在最後加'/0'

c++字元陣列與字串賦值問題

7樓:匿名使用者

char a ="123";

string s = a;

8樓:

#include

using namespace std;

int main()

;string s;

for (int i=0;i<3;++i)s+=k[i];

cout<

return 0;

}執行通過

9樓:祚胤

char * ch="test";

string str(ch);

建構函式!

10樓:yxl_小路路

例如:string str;

char ch[10]="aaaaaaaa";

str = ch;就行了

11樓:匿名使用者

char ch = 'a';

char * str = sprintf("%c",ch);

12樓:搞中嘢

char str1[10]="abcd";

string str2;

str2=str1;

13樓:匿名使用者

包含標頭檔案

然後在程式中利用strcpy(string_str,char_array),char_array為陣列名,string_str為字串名。

c語言中將字串賦值給字元陣列的問題

14樓:大野瘦子

char s[20];s="helo";這樣錯誤的原因就是:不能用賦值語句將乙個字串常量直接給乙個字元陣列賦值。

char s[20];

char ss="hello";

s=ss;錯誤原因是:不能用賦值語句將乙個字元陣列直接給乙個字元陣列賦值

,即字串的複製(c語言中,但是在c++的string 類,上面的賦值是正確的)必須用strcpy()函式實現。

而char a[ ]=」toyou「;正確的原因是:因為在宣告陣列變數的時候就是,為其開闢空間,並為其初始化,這樣才是符合c語言語法的。

c語言中字串賦值的理解

一、指標式賦值

上面的示例是顯然可以正常執行的,也是很容易理解的。但是下面這種方式就令人有點難以理解了。

通過程式的運**況,我們可以知道:char *p = "hello";這種字串的賦值方式是完全沒有問題的。要理解這種賦值方式,我們首先得理解雙引號(特別注意:

這個是雙引號,不要賦值的時候給弄了個單引號)在這個語句中做了什麼工作。雙引號主要做了3個工作,分別是:

(1)申請了空間(在常量區),存放了字串。

(2)在字串尾加上了「\0」。

(3)返回位址。

這裡所返回的位址就賦值給了char *型別的指標變數p。

二、通過字元陣列直接把字串賦值。程式如下:

三、需要注意的一些問題

直接把字串賦值給陣列名(也就是陣列首元素的首位址)是不行的。

15樓:

char a ="toyou";

這才是對的,要用雙引號。

這種方式叫初始化,是可以的,"toyou"這個字串放在資料區里,在編譯階段就確定了。

a作為陣列名,它是乙個常指標,不能改變所指向的位址,只能是&a[0]所以你在非宣告的地方用a="***",就相當於改變了常量的值,是不允許的。

16樓:

#include

int main()

17樓:豬頭或火寶寶

你好!!!

舉例如下:

char s[20];s="helo";這樣是錯誤的,原因就是不能用賦值語句將乙個字串常量直接給乙個字元陣列賦值。

char s[20];

char ss="hello";

s=ss;這也是錯誤的,原因是不能用賦值語句將乙個字元陣列直接給乙個字元陣列賦值

即字串的複製(c語言中,但是在c++的string 類,上面的賦值是正確的)必須用strcpy()函式實現。

而char a[ ]=」toyou「;為上面是正確呢???那是因為我們在宣告陣列變數的時候就是,為其開闢空間,並為其初始化,這樣才是符合c語言語法的。而上面的都是不符合語法的。

c語言陣列初始化,C語言陣列的初始化表示方法

陣列的編號是從0開始的,所以當i 2時,score 2 實際是第三個數,前面還有score 0 和score 1 兩個數。c語言陣列的初始化表示方法 在c語言中,陣列的初始化有以下幾種方式 1 定義的時候同時初始化 int array 10 2 定義的時候不指定陣列大小,由初始化的陣列元素來確定大小...

關於字元陣列的賦值問題!字元陣列賦值問題

22,選a 理由 字串是以 0 結束的,所以加上 good 就是6個位元組,而陣列的大小才是5,所以空間不夠,大小至少為6,改為 char str 6 good 或者。char str good 都可以,後者根據字串的字元個數自動匹配陣列大小。34,選c 理由 同17題。3,選a 理由 同17題。哥...

C裡初始化二維陣列int a230正確嗎?是什麼意思?謝謝

不可以如果想定義並初始化可以這樣 int a 2 3 表示二維陣列所有值都賦值成0 也可以先定義再初始化,int a 2 3 a 2 3 0 表示把陣列a中第三行第四列數賦值成0 其實bai 這個是進行乙個初始化du,你測試一zhi下,如果你只定dao義了int a 3 2 但是你沒有專賦值的話,你...