描述
int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
声明
下面是 strcmp() 函数的声明。
int strcmp(const char *str1, const char *str2)参数
- str1 -- 要进行比较的第一个字符串。
- str2 -- 要进行比较的第二个字符串。
返回值
该函数返回值如下:
- 如果返回值小于 0,则表示 str1 小于 str2。
- 如果返回值大于 0,则表示 str1 大于 str2。
- 如果返回值等于 0,则表示 str1 等于 str2。
实例
下面的实例演示了 strcmp() 函数三个返回值的用法。
#include <stdio.h>
#include <string.h>
int main(void){
char str1[5] = "ABc";
char str2[5] = "aBc";
char str3[5] = "aBc";
char str4[5] = "ABc";
char str5[5] = "aBc";
char str6[5] = "aBc";
int ret1 = strcmp(str1,str2);
int ret2 = strcmp(str3,str4);
int ret3 = strcmp(str5,str6);
printf("%d\n",ret1);//str1小于str2返回:-1
printf("%d\n",ret2);//str1大于str2返回:1
printf("%d\n",ret3);//str1等str2返回:0
return 0;
}打印结果:

说明:
在这里我用的是VScode编译软件,因为编译软件的不同有时候返回值会根据ANSI码值进行俩个字符串比较运算。在C Primer Plus书籍中介绍strcmp() 函数比较的是字符串的内容,不是字符串的地址,千万不要以为strcmp()里面的参数是char *str1就认为比较的是指针地址。
代码分析:
str1小于str2返回:-1、str1大于str2返回:1、str1等于str2返回:0
说个题外话,看到很多博客将字符串常量转换为char *,比如:
char *p="aBc";该段代码编译虽然可以通过(会有警告),但在VScode会发出ISO C ++禁止从字符串常量转换为char *警告,之所以编译能通过这是因为字符串常量位于只读存储区却不允许写操作。验证如下:
#include <stdio.h>
#include <string.h>
int main(void){
char *p="aBc";
printf("%s\n", p);
return 0;
}打印结果:

在这可以看到char *p="aBc";虽然可以编译通过,但如果改变p所指向的内存的值,编译就会立马报错,代码如下:
#include <stdio.h>
#include <string.h>
int main(void){
char *p="aBc";
printf("%s\n", p);
*p = "Hello";//改变p所指向的内存的值,即改变"aBc",所以运行会出错
printf("%s\n", p);
return 0;
}打印结果:

错误:invalid conversion from 'const char*' to 'char' [-fpermissive],中文翻译过来就是:从'const char*'到'char'的无效转换。一般来说,const char *是不能转换成char *的,因为这样会删除底层const。但是这里为了兼容C代码做了特殊处理,所以允许将字符常量赋值给char*。
以上就是strcmp()函数使用方式以及说明!