在 C 語言中,沒有專屬的字符串類型。**字符串本質上是以空字符 `\0` 結尾的字符數組**。掌握字符與字符串的操作,是處理文本數據的基石。本文系統梳理定義方式、輸入輸出函數、標準庫函數及類型轉換技巧。
char arr[] = {'h', 'e', 'l', 'l', 'o', '\0'};
需手動添加 `\0`,編譯器不會自動補全。
char arr1[] = "HELLO"; // 等價於 {'H','E','L','L','O','\0'}
雙引號語法糖自動在末尾追加 `\0`,長度為字符數 + 1。
同一維數組用法,`%s` 讀取/輸出至空白字符或 `\0`。
單字符讀寫,適合逐字符處理邏輯。示例:讀取一行並回顯。
char buf[1000];
int i = 0;
char ch;
while ((ch = getchar()) != '\n') {
buf[i++] = ch;
}
buf[i] = '\0';
for (int j = 0; buf[j]; j++) putchar(buf[j]);
putchar('\n');
char str[100];
gets(str); // 讀取整行(含空格),遇換行符停止並替換為\0
puts(str); // 輸出字符串並自動換行
<string.h>| 函數 | 功能 | 關鍵注意點 |
|---|---|---|
strcpy(dest, src) | 複製字符串 | dest 空間必須 ≥ src 長度 + 1,否則溢出 |
strcat(dest, src) | 拼接字符串 | dest 需有足夠空間容納拼接結果 |
strlen(str) | 計算長度 | 返回不含 `\0` 的字符數,類型 `size_t` |
strcmp(s1, s2) | 比較字符串 | 按 ASCII 碼逐字符比較,相等返回 0 |
<ctype.h>常用於單字符判斷與大小寫轉換:
isalpha(c)、isdigit(c)、isupper(c)、islower(c)toupper(c)、tolower(c)實戰:字符串大小寫反轉
char line[100];
gets(line);
for (int i = 0; line[i]; i++) {
char c = line[i];
if (isupper(c)) putchar(tolower(c));
else putchar(toupper(c));
}
putchar('\n');
<stdlib.h>char *s = "11.52";
double d = atof(s); // 11.52
int i = atoi(s); // 11 (截斷小數)
int num = 1000;
char buf[100];
sprintf(buf, "%d", num); // "1000"
sprintf(buf, "%10s", "asdf"); // 寬度 10 右對齊