首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C 語言沒有 string 類型:字符串處理本質與 C++ string 對比

     編輯:C 語言問答

C 語言沒有 string 類型:字符串處理本質與 C++ string 對比

C 語言無內建字符串類型,所謂「字符串」本質是以空字符 `\0` 結尾的字符數組 (`char[]` 或 `char*`)。

C vs C++ 字符串對比

特性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`==` `<` `>` 直觀
邊界安全極易緩衝區溢出內部檢查、異常安全

C 風格字符串核心操作 (``)

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, ...) // 安全版本

安全最佳實踐

  1. 優先使用 `snprintf`、`strncpy`、`strncat` 限制長度
  2. 目標緩衝區大小務必 ≥ 源長度 + 1 (留 `\0` 位)
  3. 複製後手動確保 `\0` 結尾:`dest[n-1] = '\0';`
  4. 動態字符串封裝結構體:`struct String { char *data; size_t len, cap; }`
  5. 或引入第三方庫:SDS (Redis 簡單動態字符串)、bstring

C++ 兼容模式

在 C++ 中可混用:`std::string s = "hello";` 並用 `s.c_str()` 獲取 `const char*` 傳給 C 函數。反之 `std::string s(c_str);` 構造。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved