c語言的字元陣列和字串的區別,C語言的字元陣列和字串的區別

時間 2021-09-02 07:15:46

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語言中將字串...