关于C语言中strcmp()函数比较两个字符数组返回随机值问题

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,数组内容相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值