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

C語言 strcmp 字符串比較規則詳解:字典序、ASCII 碼與長度影響

     編輯:C 語言問答

核心規則

strcmp(s1, s2) 按字符 ASCII 碼逐個比較,遇到不同字符即返回差值;若前缀完全相同,則長字符串大於短字符串(因 \0 < 任何可見字符)。

返回值語義

  • < 0:s1 < s2
  • == 0:s1 == s2
  • > 0:s1 > s2

經典案例演示

s1s2比較過程結果
"ABC""AB"'A'='A', 'B'='B', 'C' > '\0'>0 (ABC > AB)
"AEF""AG"'A'='A', 'E' (69) < 'G' (71)<0 (AEF < AG)
"abc""ABC"'a' (97) > 'A' (65)>0 (區分大小寫)
"hello\0world""hello"前 5 字符相同,s1 第 6 字符 'w' > '\0'>0

實現原理(教學版)


int my_strcmp(const char* s1, const char* s2) {
    while (*s1 && (*s1 == *s2)) { s1++; s2++; }
    return (unsigned char)*s1 - (unsigned char)*s2;  // 強制無符號避免溢出
}

常見陷阱

  1. 不要用 == 比較字符串:比較的是地址而非內容;
  2. 區分大小寫:'A' (65) != 'a' (97),需不區分大小寫請用 strcasecmp (POSIX) 或自寫;
  3. 嵌入 \0 截斷:"ab\0cd" 實際長度為 2,比較時在 \0 停止;
  4. 返回值非標準化:標準只保證正負零,具體差值不可依賴(如不一定是 'C'-'B'=1)。

安全替代:strncmp


// 只比較前 n 字符,防止讀越界
if (strncmp(buf, "CMD:", 4) == 0) { /* 處理命令 */ }
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved