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++;}} 字串初始化,如果逐個賦值的話,系統不是會自動新增 0 嗎不是。圖一就是長度為4的陣列,圖二長度為5圖三會是新增 0,但是是會把後面所有的都設為 0因為圖一和圖四不以 0結尾,所以不能用strlen和strcmp,會越界 圖四也可以用char str 4 stop 這樣賦值。如果不手動加長度就會是5了... 首先字串定義是 char c 用指標 而不是char c 這樣是單個字元定義了。其次字串賦值要加上雙引號 即c 0326 最後輸出用s d 是整型輸出了。0362是8進位制數 以0開頭 轉化為十進位制是242。char 佔一個位元組 型別的範圍是 128 127,242超過了char的表達範圍。所以... 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 ...C語言字串問題,C語言字元陣列與字串問題
c語言字串問題
C語言字串問題