WeHelp
C 語言是一種通用的、程序式的程式語言,可直接對記憶體與硬體進行操作,效率極高。
  1. C 特色用途、相關職務
  2. Windows 環境建置、測試
  3. Mac 環境建置、測試
  4. Linux 環境建置、測試
  5. C 標準輸出、輸入
  6. C 資料型態
  7. C 變數使用
  8. C 運算符號
  9. IF 條件判斷
  10. Switch 條件判斷
  11. While 迴圈
  12. For 迴圈
  13. Array 陣列
  14. String 字串
  15. Function 函式
  16. 標準函式庫
  17. Struct 結構
  18. Pointer 指標
  19. 指標與函式參數
  20. 指標與陣列
  21. 指標與結構
  22. 動態配置記憶體
String 字串
## C 的 String(字串)觀念 C 語言**沒有內建的 `string` 型別**。C 的字串通常是由 `char` 陣列組成,並且在字串結尾加上特殊字元: ```c '\0' ``` 這個字元稱為 **Null terminator(字串結束字元)**。 例如: ```c char word[] = "Hello"; ``` 實際上記憶體內容如下: ```text 'H' 'e' 'l' 'l' 'o' '\0' ``` 因此 `"Hello"` 需要 6 個 `char` 空間,而不是 5 個。 ### 常見宣告方式 ```c char s1[] = "Hello"; // 可修改內容,大小自動計算 char s2[20] = "Hello"; // 可修改內容,預留 20 個字元 char s3[] = {'H', 'i', '\0'}; ``` --- ## 常見字串操作 使用以下函式時,通常需要: ```c #include <string.h> ``` | 函式 | 功能 | |---|---| | `strlen(s)` | 取得字串長度,不包含 `'\0'` | | `strcpy(dest, src)` | 複製字串 | | `strcat(dest, src)` | 將字串接到另一字串後面 | | `strcmp(s1, s2)` | 比較兩個字串 | | `strchr(s, c)` | 尋找字元 | | `strstr(s1, s2)` | 尋找子字串 | 輸出字串時使用: ```c printf("%s", str); ``` 注意:字串陣列的容量必須足夠容納內容以及最後的 `'\0'`,否則可能造成緩衝區溢位。 --- ## 範例 1:輸入字串並計算長度 ```c #include <stdio.h> #include <string.h> int main(void) { char name[50]; printf("請輸入姓名:"); fgets(name, sizeof(name), stdin); // 移除 fgets 讀入的換行字元 name[strcspn(name, "\n")] = '\0'; printf("你好,%s!\n", name); printf("字串長度為:%zu\n", strlen(name)); return 0; } ``` 重點: - `fgets()` 可以限制最多讀取的字元數,比 `gets()` 安全。 - `strlen()` 不計算結尾的 `'\0'`。 - `strcspn(name, "\n")` 可找出換行字元的位置。 --- ## 範例 2:複製與串接字串 ```c #include <stdio.h> #include <string.h> int main(void) { char message[50]; strcpy(message, "Hello"); strcat(message, ", C language!"); printf("%s\n", message); printf("長度:%zu\n", strlen(message)); return 0; } ``` 執行結果可能是: ```text Hello, C language! 長度:17 ``` 在這個範例中: ```c strcpy(message, "Hello"); ``` 先將字串複製到 `message`。 ```c strcat(message, ", C language!"); ``` 再將另一個字串接到 `message` 後面。 使用 `strcpy()` 和 `strcat()` 時,目的陣列一定要有足夠空間,否則可能導致記憶體錯誤。
相關學習地圖、教學課程
C 語言,系統程式
掌握基礎的 C 語法,以及進階的系統程式開發能力。