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

C語言字符串處理函數庫:strlen、strcat、strcpy、strcmp 完整指南

     編輯:C 語言基礎

頭文件依賴

  • IO 函數(printf、scanf、puts、gets):<stdio.h>
  • 字符串處理函數:<string.h>

1. strlen - 字符串長度

size_t strlen(const char *str);
  • 返回不含結束符 \0的字符數
  • 從首字符開始計數,遇 \0 停止

示例

char str[] = "C language";      // strlen = 10
char str2[] = "C \0language";   // strlen = 2(遇內嵌 \0 停止)

2. strcat - 字符串拼接

char *strcat(char *dest, const char *src);
  • 將 src 拼接到 dest 末尾,覆蓋 dest 的 \0
  • dest 必須有足夠空間,否則緩衝區溢出
  • 返回 dest 首地址

示例

char str1[40] = "My name is ";
char str2[20];
gets(str2);  // 輸入 "xiao p"
strcat(str1, str2);
puts(str1);  // 輸出 "My name is xiao p"

3. strcpy - 字符串復制

char *strcpy(char *dest, const char *src);
  • 將 src(含 \0)完整復制到 dest
  • dest 空間必須 ≥ src 長度+1
  • 返回 dest 首地址

示例

char str1[15], str2[] = "C Language";
strcpy(str1, str2);
puts(str1);  // 輸出 "C Language"

4. strcmp - 字符串比較

int strcmp(const char *s1, const char *s2);
  • 按ASCII 碼值逐字符比較
  • 相等返回 0;s1 > s2 返回 >0;s1 < s2 返回 <0
  • 比較到首對不同字符或任一字符串結束

示例

char *a = "aBcDeF", *b = "AbCdEf", *c = "aacdef", *d = "aBcDeF";
printf("%d\n", strcmp(a, b));  // 1  ('B'(66) > 'b'(98)? 不,'a'(97) > 'A'(65) → 正數)
printf("%d\n", strcmp(a, c));  // -1
printf("%d\n", strcmp(a, d));  // 0

運行結果

strcmp(a, b) : 1
strcmp(a, c) : -1
strcmp(a, d) : 0

函數對比速查表

函數功能關鍵注意點返回值
strlen求長度不含 \0長度 (size_t)
strcat拼接dest 需足夠大,會覆蓋 \0dest 地址
strcpy復制dest 需足夠大,含 \0dest 地址
strcmp比較按 ASCII,區分大小寫0/正/負

安全增強版(C11 附錄 K / Microsoft 扩展)

strcat_s(dest, destsz, src);   // 檢查緩衝區大小
strcpy_s(dest, destsz, src);
int strcmp_s(const char *s1, const char *s2);  // 行為同 strcmp

常見錯誤與最佳實踐

  • ❌ strcat(str1, str2) 而 str1 空間不足 → 緩衝區溢出
  • ❌ strcmp(str1, str2) == 1 判斷大小 → 應用 > 0
  • ✅ 使用 strncat/strncpy/strncmp 限制最大字符數
  • ✅ 處理用戶輸入前先驗證長度
  • ✅ 考慮使用 std::string (C++) 或安全庫函數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved