c c中c串和字串

2021-07-25 10:53:15 字數 2000 閱讀 8290

是在用c串處理字串問題時遇到「char str不是變數無法賦值「錯誤時,仔細複習了一下c裡的c串和字串。
1.字元陣列

char

str[max];

for(int i =0; istr[i] = i + '0';//轉成char型

}

可以見到,char[max]陣列和其他的陣列如:int[max]的操作是一致的。具體來說,就是必須用的方式訪問陣列的每一位,並進行操作。而指標str同樣是指向陣列的頭指標。用指標訪問用
char *sstr = str;

while(*sstr)

要注意的是:在printf裡%c與char對應,而%s與char*對應。
2.c串與字串

關鍵在於,c裡的字串就是c串+結尾字元是』\0』。也就是,字串的長度會比c串長1.

a.定義的時候直接用字串賦值,初始化賦值:

char a[10]="hello";

char b = "world";

當用」「的方式初始化乙個字元陣列時,不規定長度是可以的。

char a="hello";

char b[10]="world";

printf("%d,%d",sizeof(a),sizeof(b));

printf("%s\n%s\n",a,b);

測試上面的簡單**,發現sizeof(a) = 6,sizeof(b) = 10

這個結果表明了初始化形式賦值是把a當做字串來處理的。

注意:不能先定義再給它賦值,如

char

a[10];//可以,注意c裡除了初始化必須規定長度。

a[10]="hello"

;//錯誤,a[10]是乙個char型,

a = "hello";//錯誤,a是指標,給指標賦值

這樣是錯誤的!

b.對陣列中字元逐個賦值

char a[10]=;

這種字串就是常用的陣列初始化。那麼,」「可以看作是一種更方便更快捷方式過載了初始化。

c.利用strcpy

char

a[10];

strcpy(a, "hello");

在< string.h >裡有大量操作字串的函式。

詳細網上一搜即可。字串操作

總結:

c語言的運算子根本無法操作字串。在c語言中把字串當作陣列來處理,因此,對字串的限制方式和對陣列的一樣,特別是,它們都不能用c語言的運算子進行複製和比較操作。

直接嘗試對字串進行複製或比較操作會失敗。例如,假定str1和str2有如下宣告:

char str1[10], str2[10];

利用=運算子來把字串複製到字元陣列中是不可能的:

str1 = 「abc」; /* wrong */

str2 = str1; /* wrong */

c語言把這些語句解釋為乙個指標與另乙個指標之間的(非法的)賦值運算。但是,使用=初始化字元陣列是合法的:

char str1[10] = 「abc」;

這是因為在宣告中,=不是賦值運算子。

試圖使用關係運算子或判等運算子來比較字串是合法的,但不會產生預期的結果:

if (str1==str2) … /* wrong */

這條語句把str1和str2作為指標來進行比較,而不是比較兩個陣列的內容。因為str1和str2有不同的位址,所以表示式str1 ==

str2的值一定為0。

C C 中的字元和字串

目錄結構 contents structure 定義和初始化string string物件上的操作 處理string物件中的字元 c風格字串 標準庫型別string表示可變長的字串行,使用string型別必須首先包含string標頭檔案,作為標準庫的一部分string定義在標準庫std中。inclu...

C字串和C 字串

在c中,並沒有字串這個資料型別,而是使用字元陣列來儲存字串。c字串實際上就是乙個以null 0 字元結尾的字元陣列,null字元表示字串的結束。需要注意的是 只有以null字元結尾的字元陣列才是c字串,否則只是一般的c字元陣列。c字串定義時可以利用 號進行初始化,但是以後不能利用 對c字串進行賦值。...

C字串和C 字串

from 在c中,並沒有字串這個資料型別,而是使用字元陣列來儲存字串。c字串實際上就是乙個以null 0 字元結尾的字元陣列,null字元表示字串的結束。需要注意的是 只有以null字元結尾的字元陣列才是c字串,否則只是一般的c字元陣列。c字串定義時可以利用 號進行初始化,但是以後不能利用 對c字串...