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

C語言標準庫字符串處理函數速查手冊

     編輯:關於C語言

C語言標準庫字符串處理函數速查手冊

<string.h> 提供的字符串函數是 C 程序員的基本功。本文整理 8 大核心函數的原型、語義、參數要求、返回值與典型陷阱,附帶安全替代建議。

函數總覽表

函數原型功能關鍵注意點
putsint puts(const char *s)輸出字符串並自動換行僅能輸出單個字符串,末尾自動加 \n
getschar *gets(char *s)從 stdin 讀取一行(含空格)極其危險,C11 已移除,無緩衝區長度檢查,**絕對禁用**
strcatchar *strcat(char *dest, const char *src)拼接字符串dest 必須有足夠空間容納結果+\0,不檢查長度
strcpychar *strcpy(char *dest, const char *src)複製字符串(含 \0)同 strcat,**極易溢出**
strncpychar *strncpy(char *dest, const char *src, size_t n)最多複製 n 字符若 src 長度 ≥ n,**不自動添加 \0**,需手動 dest[n-1]='\0'
strcmpint strcmp(const char *s1, const char *s2)字典序比較返回 <0, =0, >0;區分大小寫;strcasecmp 忽略大小寫(POSIX)
strlensize_t strlen(const char *s)計算字符串長度(不含 \0)若無 \0 導致越界讀取,O(n) 時間
strlwrchar *strlwr(char *s)轉小寫(原地修改)非標準(Microsoft 擴展),跨平台請用 tolower 循環
struprchar *strupr(char *s)轉大寫(原地修改)同 strlwr,非標準

安全替代方案(C11 Annex K / POSIX / 常用庫)

不安全函數推薦替代來源
getsfgets(buf, sizeof(buf), stdin)C 標準
strcpystrcpy_s / strlcpy (BSD) / snprintfC11 / BSD / 常用
strcatstrcat_s / strlcat / snprintfC11 / BSD / 常用
sprintfsnprintf / sprintf_sC99 / C11
strlwr/strupr手寫循環 for(p=s;*p;p++) *p=tolower(*p)標準 C

常見錯誤模式與修正

// ❌ 錯誤:直接賦值字符串字面量給數組
char s[10] = "hello";  // 只能在定義時初始化
s = "world";           // 編譯錯誤:數組不可賦值

// ✅ 正確:用 strcpy/strncpy
strcpy(s, "world");

// ❌ 錯誤:strncpy 不保證以 \0 結尾
char d[5]; strncpy(d, "abcdef", 5); // d = {'a','b','c','d','e'} 無 \0
// ✅ 正確:
strncpy(d, "abcdef", 4); d[4] = '\0';

字符串處理黃金法則

  1. 永遠分配足夠空間(含 \0);
  2. 優先使用帶長度限制的函數(snprintf、strncpy+手動終止、strncat);
  3. 輸入驗證:檢查指針非 NULL、緩衝區大小;
  4. 跨平台避開非標準函數(strlwr/strupr/strdup 等);
  5. 考慮使用動態字符串庫(如 sds、bstring)替代手工管理。

熟練掌握這些函數的「邊界行為」,是從「能跑通」進入「寫得穩」的關鍵一步。

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