/* PC上食用更佳哦!
date:2022年7月6日11:06:30
*/
strcmp即string compare(应该是这样的)
用法想必大家都知道,比较字符串嘛,一般用来比较两个字符是否相等。
man一下看看,相信各位看客都能看的懂,我就不做这个翻译了,但是我觉得还是不够清晰。
还是去内核代码里看看它的真面目,我直呼哇靠这也太清晰了()
int strcmp(const char *str1, const char *str2)
{
const unsigned char *s1 = (const unsigned char *)str1;
const unsigned char *s2 = (const unsigned char *)str2;
int delta = 0;
while (*s1 || *s2) {
delta = *s1 - *s2;
if (delta)
return delta;
s1++;
s2++;
}
return 0;
}
原理:取两个字符串的值逐个比较,只有delta不为0时才返回,这里的delta = *s1 - *s2是ASCII值相减哦!
如下:
A,a,b,c在ASCII表中对应的十进制值分别是65,97,98,99
对照定义解释一下a和b的比较:刚开始,*s1 和 *s2都表示A,此时delta = *s1 - *s2 = 0,不返回
执行s1++; s2++;后,*s1 和 *s2分别表示c和a,此时delta = *s1 - *s2 = 99-97 = 2,返回2
其余的原理一样,结果如下图
#include <stdio.h>
#include <string.h>
void main(){
char *a = "Ac";
char *b = "Aa";
char *c = "ba";
char *d = "Ac";
printf("strcmp(a, b) : %d\n", strcmp(a, b));
printf("strcmp(a, c) : %d\n", strcmp(a, c));
printf("strcmp(a, d) : %d\n", strcmp(a, d));
}
因为只有两个字符串完全相等才返回0,所以一般strcmp的用法是
if( strcmp( str1 , str2 ) == 0 )
如果在VC++中和Linux下返回值不一样,可以参考一下这个链接-->strncmp最后的解释部分。