是在用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字串...