C 標準庫 <string.h> 提供了豐富的字串處理函數,以下分類整理最常用的操作:
| 函數 | 用途 | 備註 |
|---|---|---|
| strtod(str, &endptr) | 轉 double | endptr 指向未轉換部分 |
| strtol(str, &endptr, base) | 轉 long | base=0 可自動判斷 0x/0 開頭 |
| atoi(str) | 轉 int | 簡易版,無錯誤檢查 |
| atol(str) | 轉 long | 同上 |
| atof(str) | 轉 double | 同上 |
<ctype.h>)所有函數接受 int(實為 unsigned char 或 EOF),回傳非零表真:
isalpha、isupper、islower、isdigit、isxdigit(16 進位)、isspace、iscntrl、ispunct、isalnum、isprint、isgraph(可列印且非空白)。部分編譯器(如 MSVC)另提供:
strrev:反轉字串;strupr/strlwr:大小寫轉換。strset/strnset:填充字元。strtok:依分隔字元集切割字串(會修改原字串,非執行緒安全)。strdup:動態配置記憶體並複製字串,需自行 free。#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "TsinghuaOK";
char str2[] = "Computer";
printf("%s\n", strcpy(str1, str2)); // 輸出: Computer
return 0;
}
注意:目的緩衝區必須足夠大,否則會發生緩衝區溢位。
char str1[20] = "Tsinghua ";
char str2[] = "Computer";
printf("%s\n", strncpy(str1, str2, 3)); // 輸出: Comnghua
前 3 字元被覆蓋,剩餘保留原內容。
char s1[30] = "Tsinghua ";
char s2[] = "Computer";
strcat(s1, s2); // "Tsinghua Computer"
strncat(s1, s2, 3); // "Tsinghua ComputerCom"
char *a="aaa", *b="bbb", *c="ccc";
printf("%d %d\n", strcmp(b,a), strcmp(b,c)); // 正值 負值
char buf[100];
scanf("%99s", buf);
printf("長度: %zu\n", strlen(buf));
現代 C++ 建議使用 std::string,具備 RAII、自動記憶體管理、豐富的成員函數(append, insert, erase, replace, find, substr, compare 等)與迭代器支援,避免手動管理緩衝區的風險。關鍵差異:
front()/back(),用 operator[] 或 at() 存取。c_str()、data() 取得 C 風格指標。+ 運算子串接,+=、push_back() 追加。size(), capacity(), reserve(), resize()。char *p; strcpy(p, "abc"); 會導致未定義行為,必須先配置記憶體。char *p = "hello"; p[0]='H'; 會崩潰,應用陣列 char p[]="hello";。dest[n] = '\0';。strtok_r 或 C++ std::stringstream。