strcmp()比较规则
- C语言中strcmp()函数是用来比较两个字符串的大小,比较规则是逐个字符比较其ASCII值,并返回相应的值。
- 如下示例所示,str1与str2进行比较,从第一个字符'a'开始比较,第一组字符相等继续向下比较,str1的第二个字符为'b',ASCII十进制值为98,str2第二个字符为'd',ASCII十进制值为100,'b'的值小于'd'的值,比较结束,函数返回负数。具体规则如下:
- str1与str2按字符顺序进行一一比较,若str1<str2,返回负数;若str1>str2,返回正数;若所有字符比较完都相等,则返回0。
str1 = "abcd";
str2 = "ade";
两个数组比较返回随机值:
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <string.h>
int main() {
char arr1[] = { '1','2' };
char arr2[] = { '1','2' };
int ret = strcmp(arr1, arr2);
printf("%d", ret);
return 0;
}
- 多次运行代码,可以发现返回值有时为-1,有时为1 ,返回的结果表示两个数组不相等。这是因为字符串是以'\0'结尾,strcmp()函数在进行比较时,字符一一比较,直到字符不同或到达终止符'\0'为止。如上方式创建的数组,每个数组中只有'1'和'2'两个字符,当函数比较完两组字符后并没有遇到'\0',故而继续比较,后面的值没有初始化,是随机值,故而结果有时会为1,有时会为-1
- 若以字符串的方式创建数组arr1和arr2,调试中可以发现,数组中有三个字符,分别是'1','2','\0',当函数遇到'\0'后结束比较,因比较内容全部相等,故而返回值为0
- 同理,若我们给之前的数组加上'\0',函数便不会向后继续找值,返回结果为0,数组内容相等。