c 位元組陣列的長度 字元陣列

2021-10-18 10:59:31 字數 3480 閱讀 1708

在 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....