C語言字元陣列與字串問題,C語言中將字串賦值給字元陣列的問題

時間 2021-05-07 20:01:41

1樓:渿河

這是在定義時初始化 如果你的右邊花括號內的字元個數少於【陣列元素個數】 那麼其餘的陣列元素將會初始化為0 , 』\0'的ascii碼的值就是0 ;

如果你不指定陣列元素個數 編譯器會自動幫你計算出元素個數的

2樓:

char c[10]=;這個是已經給定了陣列的大小,達不到陣列大小的長度的話會自動添零的

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

3樓:大野瘦子

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。

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

三、需要注意的一些問題

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

4樓:

char a ="toyou";

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

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

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

5樓:

#include

int main()

6樓:豬頭或火寶寶

你好!!!

舉例如下:

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

char s[20];

char ss="hello";

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

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

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

c語言字元陣列、字串的實質性問題。

7樓:

char *str = "abc";是在常量區開闢一個記憶體,放字串"abc",然後str指標指向這個常量區,而常量區有個特點:就是不能修改,如果你*str[2]='d'會報錯

char str = "abc";是放在棧區,是可能修改的

8樓:匿名使用者

char *str = "abc"; 與 char str 是一樣的,都是指向首地址。str只是個指標變數。

請教c語言字串和字元陣列的比較問題

9樓:yuanyuan源遠

利用fgets()取得一個字串,直到讀取到"回車"符,而你得到的字串中含有「回車」(ascii:10),比你要比較的字串多一個「回車」,所以strcmp()比較結果一直不為零。

如第一次while迴圈的結果:

10樓:it孤鶩

#include

#include

#include

int main(void)

fclose(fp);

system("pause");

return 0;

}上面的**更靠譜

你用過用fgets 那麼處理的字串後面一直要加'\0'

11樓:匿名使用者

fgets()到buff後,沒有\0結束標記

12樓:餘煙琦釵

c語言的字元陣列有兩種,比較方式也有所不同。

1字串。

c語言的字串是用字元陣列表示的。約定以'\0'(ascii碼0)作為結尾標記。

對於字串類的字元陣列,可以用string.h中的strcmp函式進行比較。

intstrcmp(char

*str1,

char

*str2);

其比較規則為:

a,從左向右依次比較每個元素;

b,如果出現str1的元素ascii碼比較大,則返回1;如果出現str2元素ascii碼比較大,則返回-1。如果相等,則繼續。

c,如果一直相等,直到遇到\0,這時檢查是否均為\0,如果均為\0,那麼返回0;

d,如果str1到\0,而str2沒到,返回-1;

否則返回1。

總結規則就是,如果str1比str2大,返回1;如果相等,返回0;如果str1小,返回-1。

2不帶\0結束的字元陣列。

對於此類陣列,沒有庫函式可供使用,只能自己寫函式進行比較。規則可以仿照strcmp的規則。

由於沒有\0作為結束,所以引數中必須傳入每個陣列的元素個數。

int char_array_cmp(char *s1, int l1, char *s2, int l2)

c語言,關於字串與字元陣列問題,求高手指點一二啊,謝謝 !!!!

13樓:

c的教科書中一再宣告,使用strcpy(str1,str2)時一定要保證str1有足夠的空間保證str2拷入。言下之意,strcpy不檢查str1是否能容納str2的拷入,正確性完全由程式設計師來控制。你把"01234567891"拷入到str[10]中,前10個字元是保險的,後二個字元就「難說」了。

之所以「難說」,是因為最後2個字元空間沒有分配給str,屬於「自由」空間,系統就可能會分配給別的變數使用。如果不分配給別的變數,那你的**就可能「永遠」正常執行下去,但一旦分配給了別的變數,其內容就可能不再是你拷入的91了……

14樓:匿名使用者

是可以用,但是很危險,呵呵

str是申請了10個單位的記憶體空間,如果他後面有自由的記憶體空間,那麼可以改寫,也就是你程式的strcpy(str,str1);操作,沒什麼危險

如果不是自由的空間,那麼改寫了別的資料,呵呵

15樓:寂寞而莫我知也

陣列越界了,但是編譯器不會報錯。但是在以後寫程式會出現bug,有時會中斷程式等。所以要養成良好的習慣。

16樓:匿名使用者

陣列越界了,str1實質上上也是開闢了一塊記憶體,它將首地址賦值給str ,str裡面存的就是str1裡面的內容了,

17樓:匿名使用者

我不知道你用的是什麼編譯器跑這個程式的,不過我在我的vs2012下跑這程式提示錯誤。

很明顯, 棧分配的空間不夠, 複製出錯.

c語言中,字串與字元陣列的問題。請問下面的**中b=a為什麼不行?謝謝。

18樓:匿名使用者

不一樣的,你可以執行下試試,列印一下a和b,你會發現列印a時輸出hello,而列印b則輸出的是陣列的首地址

19樓:匿名使用者

for(int i=0;i

20樓:匿名使用者

字串陣列中的每個元素只能存放一個字元,你這樣的賦值語句是把"hello"字串賦給了b[0]

21樓:匿名使用者

字串操作儘量使用c++ / c 語言api來操作 例如strcpy ,或者是記憶體拷貝。

c語言字串陣列和字元陣列有什麼區別?

22樓:孤獨的蠍子

這個是字元陣列。

c語言字元陣列和字串的區別,字元陣列是一個儲存字元的陣列,而字串是一個用雙括號括起來的以'\0'結束的字元序列,雖然字串是儲存在字元陣列中的,但是一定要注意字串的結束標誌是'\0'。

總的來說是沒有區別的,字串就是以字元陣列形式儲存的。可以把一個字串看成是一個字元陣列,可以按陣列那樣操作。兩者沒有本質的區別,只是在不同的情況下有不同的叫法。

23樓:匿名使用者

char a=;這個字元陣列char a=;這個的話可以說是一個字串陣列。一維的字元陣列是就如char a=;二維的字元陣列是就如char a={"sasa","dadad","rerf",可以說二維的字元陣列就是字串陣列

24樓:

int array[10];

char array[10];

第2行是字元陣列,也就是說此時的陣列在記憶體中是一段連續的儲存空間,這一段空間 裡面的單位是1個位元組一個位元組的。好比火車一節一節連線在一起,通俗來說字元陣列裡面裝的都是字元

第1行是整形陣列,也就是說此時的陣列在記憶體中是一段連續的儲存空間,這一段空間 裡面的單位是2(或4位元組)個位元組2個位元組的。好比火車2節2節連線在一起,通俗來說整形陣列裡面裝的都是int型整數

不過你說的這個問題看你看問題的角度了。本質區別?用法區別?等等······

我跟你講的是記憶體中的區別。

共同點:都是連續的空間。

不同的:單元長度不一樣。

25樓:某某知識教授

總的來說是沒有區別的,字串就是以字元陣列形式儲存的。

可以把一個字串看成是一個字元陣列,可以按陣列那樣操作。兩者沒有本質的區別,只是在不同的情況下有不同的叫法。

26樓:匿名使用者

這個是字元陣列,沒有字串陣列這種說法的。。 char a[ ]="abcd";就是可以用字串給字元陣列初始化

27樓:匿名使用者

字串本身就是一陣列(c風格字串),以0字元結尾

這裡的a說成是字元陣列沒問題,說成是字串也對

因為c裡字串的組織形式本質就是陣列

28樓:來賓你好闖天涯

字元陣列可以轉為字串陣列,但是字串陣列不可以轉為字元陣列

c語言字元陣列和字串程式設計題 求解

29樓:匿名使用者

|#include

int main();

scanf("%s",st);

total(st,b);

printf("字串長度:%d,字母du個數zhi:%d,數字個數:%d,其他字元個數:%d\n",b[0],b[1],b[2],b[3]);

return 0;

}void total(char st,int b)else if(st[i]>='0' && st[i]<='9')else

i++;}}

C語言字串問題,C語言字元陣列與字串問題

字串初始化,如果逐個賦值的話,系統不是會自動新增 0 嗎不是。圖一就是長度為4的陣列,圖二長度為5圖三會是新增 0,但是是會把後面所有的都設為 0因為圖一和圖四不以 0結尾,所以不能用strlen和strcmp,會越界 圖四也可以用char str 4 stop 這樣賦值。如果不手動加長度就會是5了...

c語言字串問題

首先字串定義是 char c 用指標 而不是char c 這樣是單個字元定義了。其次字串賦值要加上雙引號 即c 0326 最後輸出用s d 是整型輸出了。0362是8進位制數 以0開頭 轉化為十進位制是242。char 佔一個位元組 型別的範圍是 128 127,242超過了char的表達範圍。所以...

C語言字串問題

1全部char xx 50 80 是一個二維字元陣列,長度50 80個連續char空間。char tem 80 是一個一維字元陣列,長度80個連續char空間。c語言不存在字串變數型別,所有字串全部用 0結尾字元陣列表示。比如說 char a china 圖示為a0,a1,a2,a3,a4 c,h ...