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

C 語言 strcmp 函數底層實現原理與指標技巧

     編輯:關於C語言

strcmp 核心邏輯

按字典序比較兩字符串:

  • 返回 < 0:source < target
  • 返回 = 0:source == target
  • 返回 > 0:source > target

返回值為首個不相等字符的 ASCII 碼差值。

遞進式實現演示

版本一:下標法

int stringcompare(char *source, char *target) {
    int i;
    for (i = 0; source[i] == target[i]; i++) {
        if (source[i] == '\0') return 0;
    }
    return source[i] - target[i];
}

版本二:指標遍歷法 (標準庫風格)

int stringcompare(char *source, char *target) {
    for (; *source == *target; source++, target++) {
        if (*source == '\0') return 0;
    }
    return *source - *target;
}

優勢:無需索引變量,指標直接作為游標,代碼更緊湊、效率略高。

指標自增/自減經典模式:棧操作

// 壓棧
*p++ = val;   // 相當於 *p = val; p++;

// 出棧
val = *--p;   // 相當於 p--; val = *p;

這是基於指標的棧實現標準範式,利用後置/前置自增減的語義差異精確控制讀寫順序與指標位置。

關鍵技術點總結

技術點說明
字符比較直接用字符值 (ASCII/編碼值) 比較,等價於字典序
結束條件雙重:字符不等 或 遇到 '\0' (同時遇到則相等)
返回值語義差值法:正/負/零直接指示大小關係,無需額外判斷
指標參數不修改原指標值 (傳值),函數內指標移動不影響調用者
const 正確性標準庫聲明 int strcmp(const char*, const char*) 承諾不修改內容

常見變體與擴展

  • strncmp:限制比較前 n 字符
  • strcasecmp/stricmp:忽略大小寫 (POSIX/Windows)
  • memcmp:比較任意內存塊,需指定長度,不依賴 '\0'

實戰避坑

// 錯誤:邏輯倒置
if (strcmp(a, b)) { /* 相等時執行 */ }  // 相等返回 0 (假)!

// 正確
if (strcmp(a, b) == 0) { /* 相等 */ }
if (strcmp(a, b) < 0)  { /* a < b */ }

永遠顯式比較返回值與 0,切記 0 代表相等 (假),非 0 代表不等 (真)。

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