C 語言無內建字符串類型,所謂「字符串」本質是以空字符 `\0` 結尾的字符數組 (`char[]` 或 `char*`)。
| 特性 | C 風格字符串 | C++ std::string |
|---|---|---|
| 定義 | `char str[] = "hello";` | `std::string str = "hello";` |
| 頭文件 | ` | ` |
| 內存管理 | 手動 (malloc/free 或棧上) | 自動 (RAII、SSO 小字符串優化) |
| 拼接 | `strcat()` 需保證緩衝區足夠 | `s1 + s2` / `s1.append(s2)` 安全 |
| 長度獲取 | `strlen()` O(n) 掃描 | `size()` O(1) 存儲長度 |
| 比較 | `strcmp()` 返回 -1/0/1 | `==` `<` `>` 直觀 |
| 邊界安全 | 極易緩衝區溢出 | 內部檢查、異常安全 |
strlen(s) // 長度 (不含 \0)
strcpy(dest, src) // 複製 (危險)
strncpy(dest, src, n) // 指定長度複製 (不保證 \0)
strcat(dest, src) // 追加 (危險)
strncat(dest, src, n) // 指定長度追加
strcmp(s1, s2) // 比較
strncmp(s1, s2, n) // 前 n 字符比較
strchr(s, c) // 查找字符首次出現
strstr(s1, s2) // 查找子串
sprintf(buf, fmt, ...) // 格式化寫入 (危險)
snprintf(buf, n, fmt, ...) // 安全版本
在 C++ 中可混用:`std::string s = "hello";` 並用 `s.c_str()` 獲取 `const char*` 傳給 C 函數。反之 `std::string s(c_str);` 構造。