C 语言中 strcmp 函数是 string.h 头文件里面的标准库函数,作用是逐个字符对比两个字符串的 ASCII 码大小,按照字典序返回整数结果,返回值等于 0 代表两个字符串完全相同,返回大于 0 代表第一个字符串大于第二个字符串,返回小于 0 代表第一个字符串小于第二个字符串,很多新手最容易犯的错误就是直接用双等号比较字符串,双等号对比的是字符串首地址,不是字符内容,就算文字一模一样,地址不同判断结果也是假,这是字符串编程高频坑点,strcmp 是处理密码校验名字匹配排序场景必备函数,它会一直对比到遇到字符串结束符才停止,区分大小写,大写字母和小写字母 ASCII 码不一样,所以比较的时候大小写会影响最终结果。
之所以不能直接用双等号比较字符串,是因为 c 语言里面字符串本质是 char 数组,数组名字代表首地址,双等号只能判断两个地址是不是同一个位置,不能逐个比对里面每一个字符,strcmp 函数内部会从第一个字符开始依次读取 ASCII 数值做减法对比,只要某一位字符不一样,立刻停止对比,根据差值返回正负整数,不需要等全部字符遍历完,这个机制就是字典序比较的核心逻辑。
函数原型
函数原型写法是 int strcmp const char str1 const char str2,两个参数都是常量字符指针,也就是传入两个待比较字符串的首地址,函数返回 int 整型结果。
头文件要求,调用之前必须引入 string.h,缺少头文件会出现编译警告或者报错。
返回值规则
返回 0,str1 和 str2 每一个字符都相同,长度也一致,两个字符串完全相等。
返回正数,第一个不一样的位置,str1 对应字符 ASCII 码大于 str2 对应字符 ASCII 码,部分编译器返回差值,标准只要求大于 0,不强制固定差值。
返回负数,第一个不一样的位置,str1 对应字符 ASCII 码小于 str2 对应字符 ASCII 码。
短字符串是长字符串前缀的时候,短字符串判定更小,比如 abc 和 abcd 对比,abc 更小,返回负数。
使用步骤
第一步引入 string.h 头文件,第二步定义两个 char 字符数组存放待比较字符串,第三步调用 strcmp,把两个字符串名传入函数,接收返回的整数,第四步根据返回值写分支判断,判断字符串是否相等或者大小关系,第五步测试大小写长短不同的样例,验证比较结果。
对比表格
| 比较方式 | 对比对象 | 能否判断内容 | 常见问题 |
|---|---|---|---|
| strcmp | 逐字符 ASCII 内容 | 可以 | 区分大小写 |
| 双等号 | 首地址 | 不可以 | 内容相同也可能判断不相等 |
高频易错要点
strcmp 区分大小写,A 和 a 的 ASCII 数值不同,如果想要忽略大小写比较,不能直接用 strcmp,需要使用 strcasecmp 这类函数,部分编译器不一定支持。
传入参数必须是合法字符串,末尾要有结束符,如果字符数组没有加结束符,strcmp 会一直往后读取内存,出现越界访问,产生乱码崩溃。
不要把返回值直接理解成固定差值,C 标准只规定正负和零,不同编译器返回的具体数值可能不一样,写代码只判断大于 0 等于 0 小于 0,不要依赖具体差值。
C 语言中 strcmp 函数怎么用啊,核心就是引入 string.h,传入两个字符串,根据返回的正负零判断字典序大小,记住不能用双等号比较字符串,留意大小写区分和字符串结束符,在登录校验字符串排序这类场景就可以稳定完成字符串内容对比。
【常见问题】
问题 1 C 语言中 strcmp 函数怎么用啊为什么不能用双等号比较字符串
回答 1 C 语言中 strcmp 函数怎么用啊,双等号比较的是字符串首地址不是字符内容,所以必须使用 strcmp 逐位对比 ASCII 码,才能判断字符串内容是否一致。
问题 2 C 语言中 strcmp 函数怎么用啊返回 0 代表什么
回答 2 C 语言中 strcmp 函数怎么用啊,返回 0 代表两个字符串所有字符完全相同,字典序相等,这也是判断字符串相等最常用判断条件。
问题 3 C 语言中 strcmp 函数怎么用啊区分大小写吗
回答 3 C 语言中 strcmp 函数怎么用啊,默认区分大小写,大小写字母 ASCII 码不同,对比的时候会判定两个字符串不相等。
问题 4 C 语言中 strcmp 函数怎么用啊需要什么头文件
回答 4 C 语言中 strcmp 函数怎么用啊,必须引入 string.h 头文件,没有引入头文件,编译器会提示隐式声明警告,影响程序运行。
【免责申明】
本文内容仅用于 C 语言学习参考,不同编译器对 strcmp 返回具体数值实现存在差异,请结合编译环境测试验证,相关内容不构成绝对标准承诺,相关风险由使用者自行承担。


