在 c 語言中,字串應用的非常廣泛,但是卻沒有字串型別。為了解決這個問題,c語言使用字元陣列來儲存字串。
1. 字串與字串結束標誌.
在 c 語言中沒有專門定義字串型別,通常使用字元陣列來儲存字串。由於字串也採用字元陣列進行儲存,為了區分普通字元陣列和字串,c 語言規定以字元』\0』作為字串結束標誌。例如:
char c[ ]=;
以上字元陣列中沒有』\0』表示是普通的字元陣列。
char c[ ]=;
以上字元陣列以字元』\0』結束表示是字串。
分析程式中記憶體的分布,思考為什麼需要'\0'作為結束標誌。
除了以上初始化方式,也可以採用字串對字元陣列進行初始化,例如:
char c[ ]=「hello」;
使用字串方式進行賦值時,系統會自動在字串末尾新增』\0』,「hello」在記憶體中實際存情況式如圖所示:he
llo\0
通過對比可以發現,使用字串初始化更加簡潔、而且無需指定字元陣列長度,系統會自動計算字串長度並且新增』\0』。
2. 』\0』注意事項
在 c 語言中,採用』\0』作為字串結束標誌,當系統讀取到』\0』時,認為字串結束,』\0』之後的內容將不再讀取。因此,通常將』\0』新增在字串末尾,保證字串完整輸出。不過需要注意的是,』\0』其實可以新增在字串任意位置上,例如:
char c[ ]=;
或
char c[ ]=;
在字串中『\0』可以省略單引號,直接寫為\0。
下面通過例子了解一下』\0』的作用。
#includeint main(); char chs2[ ]="h\0ello"; printf("%s\n",chs1); printf("%s\n",chs2); getchar(); return 0;}
執行結果如下圖:
以%s 格式分別輸出字串,可以看到只輸出了」h」。這是因為當系統讀取到』h』後面的』\0』時,就認為字串結束了,後面的內容不再讀取,因此只輸出」h」。
像 printf 等函式處理字串的時候通常都是「不見\0 不死心」,因此使用字串的時候一定不要忘了結尾的\0。
3. sizeof
由於字串底層採用字元陣列進行儲存,因此計算字串長度,等價於計算字串轉化為字元陣列後字元陣列的長度,例如:
char c[ ]="hello";
上述**,經過編譯後,會轉化為以下字元陣列形式:
char c[ ]=;
前面講過陣列長度計算方式對於計算字串長度同樣適用,例如
int length=sizoef(c)/sizeof(c[0]);
下面通過例子來了解一下。
#includeint main(); char c2[ ]="hello"; int length1=sizeof(c1)/sizeof(c1[0]); int length2=sizeof(c2)/sizeof(c2[0]); printf("%d\n",length1); printf("%d\n",length2); getchar(); return 0;}
執行結果如圖所示:
在 c 語言中,字串有效長度指的是字串中』\0』之前的字元個數,不包括』\0』。例如:
char c1[ ]=;
c1 字串有效長度為 5,不包括最後的』\0』。
char c2[ ]=;
c2 字串有效長度為 5,不包括系統自動新增的』\0』。
在實際開發中,為了快速計算字串有效長度,可以使用 c 語言標準庫提供的 strlen 函式。
函式原型:int strlen(char str[ ]);
標頭檔案(解釋什麼是 include):#include
引數列表:str:被計算的字串。
功能:計算字串有效長度。
返回值:返回字串有效長度。
#include#includeint main(); char c2[ ]="hello"; int length1=strlen(c1); int length2=strlen(c2); printf("%d\n",length1); printf("%d\n",length2); getchar(); return 0;}
執行結果為:
需要注意的是,strlen 函式內部只會計算字串中』\0』之前的字元個數,』\0』及之後的字元將被忽略。
5. 中文字串長度
在程式的預設設定中,1 個中文字元佔 2 個位元組。
char c[ ]=」你好」;
c是中文字串,有效長度為 2,2 個中文字元佔 4 個位元組,再加上』\0』佔 1 個位元組,c在記憶體中一共佔 5 個位元組。
6. 字串元素遍歷
在 c 語言中,字串本質上就是以』\0』結尾的字元陣列。同理,字元陣列也可以使用 for迴圈進行遍歷。
由於字元』\0』是控制字元,無法在控制台中顯示。但是為了讓讀者感受到字串末尾確實有』\0』的存在,以下**中,分別使用%d、%c 格式輸出陣列元素。
示例**如下:
#includeint main() getchar(); return 0;}
執行結果為:
7. char* 方式引用字串
在 c 語言中,字串儲存的方式只有一種,採用字元陣列格式進行儲存。但是引用的方式卻有兩種,除了前面介紹的字元陣列方式,還可以定義 char*型別的變數進行引用。例如:
char* string="hello";
以上**表示,定義 char*型別變數 string,並使用字串進行初始化。這涉及到後續講的「指標」的問題。
#includeint main()
執行結果為:
【注意】意用 char*方式引用字串的時候不能用 sizeof 算字串的長度。
C 字串到位元組陣列,位元組陣列轉整型
int num 12345 string num1 convert.tostring 12345,16 byte bytes bitconverter.getbytes num 將int32轉換為位元組陣列 num bitconverter.toint32 bytes,0 將位元組陣列內容再轉成in...
C 位元組陣列操作
合併位元組陣列 public static byte combinebytearray byte bytearra return ams.toarray 位元組陣列擷取 32位 public unsafe static byte subbytearray byte src,int begin,int...
C 位元組陣列擷取
c 位元組陣列擷取 如 byte bt new byte 方法一 擷取位數規則 1 擷取2位長度的位元組陣列 用bitconverter.toint16 例如,從第2位開始擷取2個位元組則 bitconverter.toint16 bt,2 2 擷取4位長度的位元組陣列 用bitconverter....