C语言使用strcmp函数实现字符串比较的方法详解

作者:袖梨 2026-06-15

前言

在 C 语言编程中字符串比较是高频操作——判断用户名是否匹配、校验密码、排序字符串数组等场景都离不开它。而 strcmp 函数 就是 C 标准库提供的、专门用于逐字符比较两个字符串的工具是字符串处理的核心函数之一。

C语言使用strcmp函数进行字符串比较的方法详解

今天我们就从函数原型、核心原理、返回值规则、使用示例、底层原理、注意事项六个方面彻底吃透 strcmp。

一、strcmp 函数基础

strcmp 全称是 string compare字符串比较定义在 C 标准头文件 <string.h> 中使用前必须包含该头文件。

1.1 函数原型

// 头文件
#include <string.h>

// 函数原型
int strcmp(const char *str1, const char *str2);

1.2 参数说明

  • str1第一个要比较的字符串加 const 常量指针保证函数内不会修改原字符串
  • str2第二个要比较的字符串
  • 两个参数都必须以 结尾符合 C 语言字符串规范

1.3 核心原理

strcmp 会从两个字符串的第一个字符开始逐字符比较它们的 ASCII 码值

  1. 若当前字符相等继续比较下一个字符
  2. 若遇到不相等的字符或其中一个字符串结束立即停止比较并返回结果
  3. 直到比较到两个字符串的末尾 若所有字符都相等返回相等结果。

二、strcmp 返回值规则

strcmp 的返回值是 int 类型只有三种情况是判断字符串关系的唯一依据

返回值范围含义示例
等于 0str1 和 str2 完全相等"abc" vs "abc"
小于 0str1 小于 str2"app" vs "apple"、"abc" vs "abd"
大于 0str1 大于 str2"zoo" vs "cat"、"123" vs "12"

关键补充

  • 字符串比较区分大小写大写字母 ASCII 码 < 小写字母比如 'A'(65) < 'a'(97)
  • 比较的是ASCII 码值不是字符串长度长度只是辅助字符大小才是核心。

三、实用代码示例

我们通过 4 个经典案例直观感受 strcmp 的用法

示例 1字符串相等比较

#include <stdio.h>
#include <string.h>  // 必须包含

int main()
{
    char str1[] = "hello";
    char str2[] = "hello";

    // 调用strcmp比较
    int result = strcmp(str1, str2);

    if (result == 0)
    {
        printf("str1 和 str2 相等n");  // 输出结果
    }
    else if (result < 0)
    {
        printf("str1 小于 str2n");
    }
    else
    {
        printf("str1 大于 str2n");
    }

    return 0;
}

示例 2字符串不相等比较

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

int main()
{
    char str1[] = "apple";
    char str2[] = "banana";

    int result = strcmp(str1, str2);

    // 'a'(97) < 'b'(98)所以返回值 < 0
    printf("比较结果%dn", result);  // 输出负数

    return 0;
}

示例 3区分大小写比较

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

int main()
{
    char str1[] = "Hello";
    char str2[] = "hello";

    int result = strcmp(str1, str2);

    // 'H'(72) < 'h'(104)返回负数
    if (result != 0)
    {
        printf("字符串不相等区分大小写n");
    }

    return 0;
}

示例 4实际场景——用户名校验

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

int main()
{
    char correct_user[] = "admin";   // 正确用户名
    char input_user[20];             // 用户输入

    printf("请输入用户名");
    scanf("%s", input_user);

    // 用strcmp校验用户名
    if (strcmp(input_user, correct_user) == 0)
    {
        printf("登录成功n");
    }
    else
    {
        printf("用户名错误n");
    }
    return 0;
}

四、strcmp 核心注意事项

4.1 绝对不能用==比较字符串

很多新手会犯这个错

char *str1 = "hello";
char *str2 = "hello";
if (str1 == str2)   // 比较的是地址不是内容

原因str1 和 str2 是字符数组名本质是数组首地址== 比较的是两个字符串的内存地址不是内容。只有地址相同才会返回真内容相同地址不同时结果一定错误。

正确做法必须用 strcmp 比较字符串内容。

4.2 必须以 结尾

strcmp 依赖 判断字符串结束如果传入非字符串字符数组无 会导致越界访问程序崩溃。

错误示例

// 没有不是合法字符串
char str1[] = {'a', 'b', 'c'};
char str2[] = {'a', 'b', 'c'};
strcmp(str1, str2);  // 未定义行为

4.3 空指针风险

如果传入 NULL 指针strcmp 会直接访问非法内存程序崩溃。

安全写法先判断指针是否为空

if (str1 != NULL && str2 != NULL)
{
    strcmp(str1, str2);
}

4.4 不要用 strcmp 比较单个字符

单个字符直接用 ==、<、> 比较即可无需调用函数

// 正确
char a = 'a', b = 'b';
if (a < b) { ... }

五、底层原理模拟实现

了解内部实现有助于避开陷阱。一个标准的 strcmp 实现如下

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

代码剖析

  • 逐字符比较直到遇到不同字符或
  • 使用 unsigned char 保证非负字符比较的正确性避免 char 默认有符号导致负数问题

六、strcmp 与 strncmp 的区别

C 语言还提供了 strncmp 函数用于比较前 n 个字符适合只需要比较部分字符串的场景

int strncmp(const char *str1, const char *str2, size_t n);
  • strcmp比较整个字符串直到
  • strncmp最多比较 n 个字符更安全避免长字符串越界。

示例

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

int main()
{
    char str1[] = "apple";
    char str2[] = "app";

    // 调用strncmp比较: 只比较前3个字符结果相等
    int result = strncmp(str1, str2, 3); // 返回0

    if (result == 0)
    {
        printf("str1 和 str2 相等n");  // 输出结果
    }
    else if (result < 0)
    {
        printf("str1 小于 str2n");
    }
    else
    {
        printf("str1 大于 str2n");
    }

    return 0;
}

全文总结

  1. strcmp 是 C 标准库函数头文件 <string.h>用于逐字符比较字符串内容
  2. 返回值0相等、<0str1小、>0str1大
  3. 核心避坑字符串比较必须用 strcmp绝不能用 ==
  4. 适用场景用户名/密码校验、字符串排序、内容匹配等。

掌握 strcmp 是 C 语言字符串处理的基础熟练使用能避免 90% 的字符串比较错误赶紧动手试试吧

以上就是C语言使用strcmp函数进行字符串比较的方法详解的详细内容更多关于C语言strcmp字符串比较的资料请关注本站其它相关文章

您可能感兴趣的文章:
  • C语言string库strcpy、strcmp、strcat函数的使用
  • 利用C语言模拟实现qsort,strcpy,strcat,strcmp函数
  • C语言strlen,strcpy,strcmp,strcat,strstr字符串操作函数实现
  • C语言详解strcmp函数的分析及实现
  • C语言详细讲解strcpy strcat strcmp函数的模拟实现

相关文章

精彩推荐