
- C程式設計教程
- C - 首頁
- C語言基礎
- C - 概述
- C - 特性
- C - 歷史
- C - 環境設定
- C - 程式結構
- C - Hello World
- C - 編譯過程
- C - 註釋
- C - 詞法單元
- C - 關鍵字
- C - 識別符號
- C - 使用者輸入
- C - 基本語法
- C - 資料型別
- C - 變數
- C - 整數提升
- C - 型別轉換
- C - 型別強制轉換
- C - 布林值
- C語言中的常量和字面量
- C - 常量
- C - 字面量
- C - 轉義序列
- C - 格式說明符
- C語言中的運算子
- C - 運算子
- C - 算術運算子
- C - 關係運算符
- C - 邏輯運算子
- C - 位運算子
- C - 賦值運算子
- C - 一元運算子
- C - 自增和自減運算子
- C - 三元運算子
- C - sizeof 運算子
- C - 運算子優先順序
- C - 其他運算子
- C語言中的決策
- C - 決策
- C - if 語句
- C - if...else 語句
- C - 巢狀if語句
- C - switch 語句
- C - 巢狀switch語句
- C語言中的迴圈
- C - 迴圈
- C - while 迴圈
- C - for 迴圈
- C - do...while 迴圈
- C - 巢狀迴圈
- C - 無限迴圈
- C - break 語句
- C - continue 語句
- C - goto 語句
- C語言中的函式
- C - 函式
- C - 主函式
- C - 按值傳遞函式
- C - 按引用傳遞函式
- C - 巢狀函式
- C - 可變引數函式
- C - 使用者定義函式
- C - 回撥函式
- C - 返回語句
- C - 遞迴
- C語言中的作用域規則
- C - 作用域規則
- C - 靜態變數
- C - 全域性變數
- C語言中的陣列
- C - 陣列
- C - 陣列的特性
- C - 多維陣列
- C - 將陣列傳遞給函式
- C - 從函式返回陣列
- C - 變長陣列
- C語言中的指標
- C - 指標
- C - 指標和陣列
- C - 指標的應用
- C - 指標運算
- C - 指標陣列
- C - 指標到指標
- C - 將指標傳遞給函式
- C - 從函式返回指標
- C - 函式指標
- C - 指向陣列的指標
- C - 指向結構體的指標
- C - 指標鏈
- C - 指標與陣列
- C - 字元指標和函式
- C - 空指標
- C - void 指標
- C - 野指標
- C - 解引用指標
- C - 近指標、遠指標和巨指標
- C - 指標陣列的初始化
- C - 指標與多維陣列
- C語言中的字串
- C - 字串
- C - 字串陣列
- C - 特殊字元
- C語言中的結構體和聯合體
- C - 結構體
- C - 結構體和函式
- C - 結構體陣列
- C - 自引用結構體
- C - 查詢表
- C - 點(.)運算子
- C - 列舉(或列舉型別)
- C - 結構體填充和打包
- C - 巢狀結構體
- C - 匿名結構體和聯合體
- C - 聯合體
- C - 位域
- C - Typedef
- C語言中的檔案處理
- C - 輸入和輸出
- C - 檔案I/O(檔案處理)
- C預處理器
- C - 預處理器
- C - 指令
- C - 預處理運算子
- C - 宏
- C - 標頭檔案
- C語言中的記憶體管理
- C - 記憶體管理
- C - 記憶體地址
- C - 儲存類
- 其他主題
- C - 錯誤處理
- C - 可變引數
- C - 命令執行
- C - 數學函式
- C - static 關鍵字
- C - 隨機數生成
- C - 命令列引數
- C程式設計資源
- C - 問答
- C - 快速指南
- C - 速查表
- C - 有用資源
- C - 討論
C語言中的字串陣列
在C程式語言中,字串是由NULL終止的字元序列陣列,它是一維字元陣列。並且,字串陣列是字串(字元陣列)的陣列。
什麼是C語言中的字串陣列?
因此,可以將字串陣列定義為 –
字串陣列是一個二維字元型別陣列,其中每個字元陣列(字串)都以空字元結尾。
要宣告一個字串,我們使用以下語句 –
char string[] = {'H', 'e', 'l', 'l', 'o', '\0'}; Or char string = "Hello";
宣告和初始化字串陣列
要宣告一個字串陣列,您需要宣告一個二維字元陣列,其中第一個下標是字串的總數,第二個下標是每個字串的最大大小。
要初始化一個字串陣列,您需要在雙引號內提供多個字串,並用逗號分隔。
語法
要構造一個字串陣列,使用以下語法 –
char strings [no_of_strings] [max_size_of_each_string];
示例
讓我們宣告並初始化一個字串陣列,以儲存10種計算機語言的名稱,每種語言的最大長度為15個字元。
char langs [10][15] = { "PYTHON", "JAVASCRIPT", "PHP", "NODE JS", "HTML", "KOTLIN", "C++", "REACT JS", "RUST", "VBSCRIPT" };
列印字串陣列
可以使用printf() 函式和%s格式說明符來列印字串。要列印字串陣列中的每個字串,您可以使用for迴圈直到字串的數量。
示例
在以下示例中,我們正在宣告、初始化和列印一個字串陣列 –
#include <stdio.h> int main (){ char langs [10][15] = { "PYTHON", "JAVASCRIPT", "PHP", "NODE JS", "HTML", "KOTLIN", "C++", "REACT JS", "RUST", "VBSCRIPT" }; for (int i = 0; i < 10; i++){ printf("%s\n", langs[i]); } return 0; }
輸出
執行此程式碼時,將產生以下輸出 –
PYTHON JAVASCRIPT PHP NODE JS HTML KOTLIN C++ REACT JS RUST VBSCRIPT
注意:每個字串的大小不等於陣列宣告中的行大小。"\0"符號表示字串的終止,並且行中剩餘的單元格為空。因此,分配給陣列的大部分記憶體未被使用,從而浪費了記憶體。
字串陣列如何在記憶體中儲存?
我們知道每個char型別在記憶體中佔用1個位元組。因此,此陣列將分配一個150位元組的塊。雖然此塊是連續的記憶體位置,但每組15個位元組構成一行。
假設陣列位於記憶體地址1000,則此陣列的邏輯佈局可以如下所示 –

使用指標的字串陣列
為了更有效地使用記憶體,我們可以使用指標。而不是二維字元陣列,我們宣告一個“char *”型別的1D陣列。
char *langs[10] = { "PYTHON", "JAVASCRIPT", "PHP", "NODE JS", "HTML", "KOTLIN", "C++", "REACT JS", "RUST", "VBSCRIPT" };
在二維字元陣列中,字串佔用150個位元組。與此相反,在指標陣列中,字串佔用的位元組數要少得多,因為每個字串都隨機分配了記憶體,如下所示 –

注意:這裡,lang[ ]是指向各個字串的指標陣列。

示例
我們可以使用如下for迴圈來列印字串陣列 –
#include <stdio.h> int main(){ char *langs[10] = { "PYTHON", "JAVASCRIPT", "PHP", "NODE JS", "HTML", "KOTLIN", "C++", "REACT JS", "RUST", "VBSCRIPT" }; for (int i = 0; i < 10; i++) printf("%s\n", langs[i]); return 0; }
輸出
執行此程式碼時,將產生以下輸出 –
PYTHON JAVASCRIPT PHP NODE JS HTML KOTLIN C++ REACT JS RUST VBSCRIPT
這裡,langs是指向10個字串陣列的指標。因此,如果langs[0]指向地址5000,則"langs + 1"將指向地址5004,該地址儲存指向第二個字串的指標。
因此,我們還可以使用迴圈的以下變體來列印字串陣列 –
for(int i = 0; i < 10; i++){ printf("%s\n", *(langs + i)); }
當字串儲存在陣列中時,有很多用例。讓我們研究一些用例。
查詢長度最大的字串
在以下示例中,我們將第一個字串的長度及其位置(即“0”)分別儲存在變數“l”和“p”中。在for迴圈中,每當找到長度更大的字串時,我們都會更新這些變數。
示例
請檢視以下示例 –
#include <stdio.h> #include <string.h> int main (){ char langs [10][15] = { "PYTHON", "JAVASCRIPT", "PHP", "NODE JS", "HTML", "KOTLIN", "C++", "REACT JS", "RUST", "VBSCRIPT" }; int l = strlen(langs[0]); int p = 0; for (int i = 0; i < 10; i++){ if (strlen(langs[i]) >= l){ l = strlen(langs[i]); p = i; } } printf("Language with the longest name: %s Length: %d", langs[p], l); return 0; }
輸出
執行此程式碼時,將產生以下輸出 –
Language with longest name: JAVASCRIPT Length: 10
按升序對字串陣列進行排序
我們需要使用strcmp() 函式來比較兩個字串。如果字串比較的值大於0,則表示第一個引數字串在字母順序上出現在第二個引數字串之後。然後,我們使用strcmp()函式交換這兩個字串。
示例
請檢視以下示例 –
#include <stdio.h> #include <string.h> int main (){ char langs [10][15] = { "PYTHON", "JAVASCRIPT", "PHP", "NODE JS", "HTML", "KOTLIN", "C++", "REACT JS", "RUST", "VBSCRIPT" }; int i, j; char temp[15]; for (i = 0; i < 9; i++){ for (j = i + 1; j < 10; j++){ if (strcmp(langs[i], langs[j]) > 0){ strcpy(temp, langs[i]); strcpy(langs[i], langs[j]); strcpy(langs[j], temp); } } } for (i = 0; i < 10; i++){ printf("%s\n", langs[i]); } return 0; }
輸出
執行此程式碼時,將產生以下輸出 –
C++ HTML JAVASCRIPT KOTLIN NODE JS PHP PYTHON REACT JS RUST VBSCRIPT
在本章中,我們解釋瞭如何宣告字串陣列以及如何在字串函式的幫助下操作它。