1樓:u愛浪的浪子
1、長度不同:
對於字元陣列,其長度是固定的,其中任何一個陣列元素都可以為 null 字元。因此,字元陣列不一定是字串。字串的結尾是以null 字元結尾,所以長度會有所不同。
2、結尾不同
對於字串,它必須以 null 字元(也就是'\0',用十六進位制表示為 0x00)結尾,其後的字元不屬於該字串。
字串一定是字元陣列,它是最後一個字元為 null 字元的字元陣列。字元陣列則不會自動增加任何東西。
3、對於字串,可以直接使用 printf 的 %s 列印其內容;而對字元陣列,很顯然使用 printf 的 %s 列印其內容是不合適的。
2樓:
c語言的字元陣列有兩種,比較方式也有所不同。
1 字串。
c語言的字串是用字元陣列表示的。約定以'\0'(ascii碼0)作為結尾標記。
對於字串類的字元陣列,可以用string.h中的strcmp函式進行比較。
int strcmp(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。
3樓:搞怪一樂
c語言的字元陣列和字串的區別如下:
1、對於字元陣列,其長度是固定的,其中任何一個陣列元素都可以為 null 字元。因此,字元陣列不一定是字串。
2、對於字串,它必須以 null 結尾,其後的字元不屬於該字串。字串一定是字元陣列,它是最後一個字元為 null 字元的字元陣列。
3、c語言中沒有一個用於表示字串的關鍵字,c語言的字串由c的字元陣列變形而成,末尾加上'\0',字串比字元陣列多一個'\0'。
4樓:寫在楓葉上的故事
1、定義的區別
字元陣列是用來存放字元的陣列。
字串是由數字、字母、下劃線組成的一串字元。
2、使用的區別
字元陣列是在c語言中被用來存放字串的,因為c語言中沒有字串型別,字串是存放在字元型陣列中的。
字串可以將字串直接賦值給字元陣列,例如:char str[30] = ;
3、書寫格式的區別
字元陣列的書寫一般形式為: char 陣列名[資料長度] 。
字串的書寫一般記為 s=「a1a2···an」(n>=0)。
4、輸入輸出的區別
字元陣列的輸入用getchar()或scanf()的'%c'格式符對陣列進行字元賦值。輸出用putchar()或printf()的『%c』格式符對陣列進行字元賦值。
字串在c語言中輸出字串時會逐個掃描字元,直到遇見 '\0' 才結束輸出。
5樓:匿名使用者
p1指向的這個字串是個常量, 不可改變, 程式在編譯期間就為"a string."這個字串分配了固定的空間, 它被儲存在全域性靜態區中.
而p2是個變數, 其內容可以被更新和改變, p2可以理解為一個不可改變其指向位置的指標, 即char * const p2, 它所佔用的記憶體在程式執行時被自動分配和釋放, 而p1佔用的記憶體要等到整個程式結束時才被釋放.
#include int g; // 儲存在全域性靜態區int main()
你可以看出p1和g的位置距離很近, 而和p2相隔很遠, 可以看出他們的確是被儲存在不同的記憶體空間中的, 而且p1所指向的內容是常量, 不能改變, :char* p = "this is the penalty!";*p = 't';
所以宣告指向常量字串的指標時最好這樣:const char* p = "...";另外任何出現在程式中以""括起的內容如果不是被儲存在變數中那麼它就是常量, 和上面的p1指向的型別相同, 比如:
printf("abc %d", 1);其中的"abc %d"也是常量;
6樓:a羅網天下
c語言中沒有用於表示字串的關鍵字以陣列形式將字串輸出。
字串和字元陣列的區別和聯絡:
c語言中沒有一個用於表示字串的關鍵字;
c語言的字串由c的字元陣列變形而成,末尾加上'\0';
字串比字元陣列多一個'\0';
例子如下:
字串常用的操作函式:
strlen :字串長度
strcmp :字串比較
strcpy :字串拷貝
strcat :字串拼接
7樓:飄渺世間天
通常字元陣列中的所儲存的內容也可以稱為字串, 但我想你想表達的意思可能是對於:
char *p1 = "a string.";
和char p2 = "another string.";
這兩種寫法的不同吧.
p1指向的這個字串是個常量, 不可改變, 程式在編譯期間就為"a string."這個字串分配了固定的空間, 它被儲存在全域性靜態區中.
而p2是個變數, 其內容可以被更新和改變, p2可以理解為一個不可改變其指向位置的指標, 即char * const p2, 它所佔用的記憶體在程式執行時被自動分配和釋放, 而p1佔用的記憶體要等到整個程式結束時才被釋放.
再看:#include
int g; // 儲存在全域性靜態區
int main()
你可以看出p1和g的位置距離很近, 而和p2相隔很遠, 可以看出他們的確是被儲存在不同的記憶體空間中的, 而且p1所指向的內容是常量, 不能改變, 不信你試試:
char* p = "this is the penalty!";
*p = 't';
所以宣告指向常量字串的指標時最好這樣:
const char* p = "...";
另外任何出現在程式中以""括起的內容如果不是被儲存在變數中那麼它就是常量, 和上面的p1指向的型別相同, 比如:
printf("abc %d", 1);
其中的"abc %d"也是常量;
8樓:匿名使用者
字串要求0結束,儲存字串的陣列需要佔用的空間=字串的長度+1
字元陣列指儲存字元的陣列
9樓:談世城
c語言字元陣列和字串的區別,字元陣列是一個儲存字元的陣列,而字串是一個用雙括號括起來的以'\0'結束的字元序列,雖然字串是儲存在字元陣列中的,但是一定要注意字串的結束標誌是'\0'。
總的來說是沒有區別的,字串就是以字元陣列形式儲存的。可以把一個字串看成是一個字元陣列,可以按陣列那樣操作。兩者沒有本質的區別,只是在不同的情況下有不同的叫法。
c語言字串陣列和字元陣列有什麼區別?
10樓:芒素蘭勵鳥
這個是字元陣列,沒有字串陣列這種說法的。。
char
a[]="abcd";就是可以用字串給字元陣列初始化
11樓:僑有福泥月
這個是字元陣列。
c語言字元陣列和字串的區別,字元陣列是一個儲存字元的陣列,而字串是一個用雙括號括起來的以'\0'結束的字元序列,雖然字串是儲存在字元陣列中的,但是一定要注意字串的結束標誌是'\0'。
總的來說是沒有區別的,字串就是以字元陣列形式儲存的。可以把一個字串看成是一個字元陣列,可以按陣列那樣操作。兩者沒有本質的區別,只是在不同的情況下有不同的叫法。
12樓:塗墨徹粟嬋
int array[10];
char array[10];第2行是字元陣列,也就是說此時的陣列在記憶體中是一段連續的儲存空間,這一段空間
裡面的單位是1個位元組一個位元組的。好比火車一節一節連線在一起,通俗來說字元陣列裡面裝的都是字元
第1行是整形陣列,也就是說此時的陣列在記憶體中是一段連續的儲存空間,這一段空間
裡面的單位是2(或4位元組)個位元組2個位元組的。好比火車2節2節連線在一起,通俗來說整形陣列裡面裝的都是int型整數
不過你說的這個問題看你看問題的角度了。本質區別?用法區別?等等······
我跟你講的是記憶體中的區別。
共同點:都是連續的空間。
不同的:單元長度不一樣。
13樓:軍淑英針寅
你那個是字元陣列
字元陣列和字串陣列的區別是,前者的每一個元素都是一個字元,而後者的每一個元素都是一個字串。
chars1=
;chars2=;
14樓:辛升始影
是字元陣列
字串陣列是指陣列裡面的元素是字串
比如char
*s[2]=是字串陣列
請教c語言字串和字元陣列的比較問題
15樓:yuanyuan源遠
利用fgets()取得一個字串,直到讀取到"回車"符,而你得到的字串中含有「回車」(ascii:10),比你要比較的字串多一個「回車」,所以strcmp()比較結果一直不為零。
如第一次while迴圈的結果:
16樓:it孤鶩
#include
#include
#include
int main(void)
fclose(fp);
system("pause");
return 0;
}上面的**更靠譜
你用過用fgets 那麼處理的字串後面一直要加'\0'
17樓:匿名使用者
fgets()到buff後,沒有\0結束標記
18樓:餘煙琦釵
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語言字串問題,C語言字元陣列與字串問題
字串初始化,如果逐個賦值的話,系統不是會自動新增 0 嗎不是。圖一就是長度為4的陣列,圖二長度為5圖三會是新增 0,但是是會把後面所有的都設為 0因為圖一和圖四不以 0結尾,所以不能用strlen和strcmp,會越界 圖四也可以用char str 4 stop 這樣賦值。如果不手動加長度就會是5了...
字元陣列和字串的區別,請問字串和字元陣列的區別是什麼
字元陣列沒有結束標誌 0 而字串則在末尾有結束標誌 0 在c中,字串就是末尾有字串結束標誌 0 的字元陣列。如果用gets 輸入,則會自動在末尾加上結束標誌 0 c語言中應該是沒有字串這種資料型別的,它只有字元型別,字串也就是字元陣列。不過gets 可以用來接受字串,但它需要提供字串的指標。子函式在...
C語言字元陣列與字串問題,C語言中將字串賦值給字元陣列的問題
渿河 這是在定義時初始化 如果你的右邊花括號內的字元個數少於 陣列元素個數 那麼其餘的陣列元素將會初始化為0 0 的ascii碼的值就是0 如果你不指定陣列元素個數 編譯器會自動幫你計算出元素個數的 char c 10 這個是已經給定了陣列的大小,達不到陣列大小的長度的話會自動添零的 c語言中將字串...