![](https://img-blog.csdnimg.cn/img_convert/00bff3de242d48672bd8c20b9cb2d053.png)
strcmp包含在<string.h>的头文件中,作用是比较两个字符串。将 C 字符串 str1 与 C 字符串 str2 进行比较。
1.strcmp函数的参数和返回值、
参数:是两个待比较字符串的首地址
返回值:此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续以下对,直到字符不同或达到终止空字符。
![](https://img-blog.csdnimg.cn/img_convert/cfca10c52e225ea4c18507d5e1892984.png)
2.VS中库函数的实现
![](https://img-blog.csdnimg.cn/img_convert/8453d91ae7f8779afa1eab6afef9160a.png)
int __cdecl strcmp (
const char * src,
const char * dst
)
{
int ret = 0 ;
while((ret = *(unsigned char *)src - *(unsigned char *)dst) == 0 && *dst)
{
++src, ++dst;
}
return ((-ret) < 0) - (ret < 0); // (if positive) - (if negative) generates branchless code
}
3.模拟实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
int my_strcmp(char* des, char* src)
{
assert(des && src);
int ret=0;
while (*des == *src)
{
des++;
src++;
}
ret = *des - *src;
return (ret > 0) - (-ret > 0);
}
int main()
{
char arr1[20] = "iloveapple";
char arr2[20] = "iloveaqple";
int ret=my_strcmp(arr1, arr2);
printf("%d",ret);
}
![](https://img-blog.csdnimg.cn/img_convert/f9314c37fba047684842961f3eb5f28e.png)
4.需要注意的是此类函数的返回值是大于零小于零,等于零,在不同的环境下具体的返回值可能不是-1,1。而是其他满足区间也是正确的。