Skip to content

1.strcmp 函数详解

strcmp 是 C 标准库中最基础的字符串比较函数,用于按字典序比较两个以 null 结尾的字符串。

(1)函数原型

c
int strcmp(const char *str1, const char *str2);

(2)功能说明

  • 比较两个以 null 结尾的字符串 str1str2
  • 比较是基于字符的 ASCII 值(或当前 locale 的字符集)逐个进行的
  • 比较过程会一直持续到遇到不同的字符或 null 终止符

返回值

返回值含义
< 0str1 小于 str2(按字典序)
0str1 等于 str2
> 0str1 大于 str2

(3)典型实现

标准库实现通常是高度优化的,但基本逻辑如下:

c
int strcmp(const char *s1, const char *s2) {
    while (*s1 && (*s1 == *s2)) {
        s1++;
        s2++;
    }
    return *(const unsigned char*)s1 - *(const unsigned char*)s2;
}

(4)使用示例

c
#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "apple";
    char str2[] = "banana";
    
    int result = strcmp(str1, str2);
    
    if (result < 0) {
        printf("'%s' comes before '%s'\n", str1, str2);
    } else if (result > 0) {
        printf("'%s' comes after '%s'\n", str1, str2);
    } else {
        printf("'%s' is same as '%s'\n", str1, str2);
    }
    
    return 0;
}
c
// 检查字符串是否以特定前缀开头
if (strcmp(str, "prefix") == 0) {
    // 完全匹配
}

// 或者使用 strncmp 检查前缀
if (strncmp(str, "prefix", 6) == 0) {
    // 前6个字符匹配
}

(5)重要特性

  1. 区分大小写:'A' 和 'a' 被认为是不同的字符
  2. 非本地化比较:基于字符编码值比较,不考虑语言规则
  3. 安全性:需要确保字符串以 null 结尾,否则可能导致缓冲区溢出

(6)相关函数

函数描述
strncmp比较字符串的前 n 个字符
stricmp/strcasecmp不区分大小写的比较
memcmp比较内存区域(不限于字符串)
strcoll基于当前 locale 的比较

滇ICP备2025057983号-1