C语言比较两个字符串相等的问题,请人详细讲解

一个程序中定义了str1,str2两个字符串,现在想要比较str1和str2是否相等。我们都知道要用函数strcmp(str1,str2)来比较而不能用str1==str2来比较。但是不知道为什么不能用后者,请高人解答下,谢谢。

C语言字符串是一系列字符,也就是char类型排列而成的。一个字符是char类型,一系列字符如何表示?用他们的第一个字符的地址表示,因为字符串在地址上也是连续排列的。并且用\0,在物理上是一个字节的全0位,来表示字符串结束。所以"abcde",空间上是'a' 'b' 'c' 'd' 'e' '\0'strcmp的参数都是char*,也就是指向字符的指针,原理是从两个指针指向的地址开始对比,直到其中一个\0为止。判断相等与否。实现上是每个字符相减。单纯的==,比较的是字符串手地址是否相等,这样比较,不但比较不了两个字符串相等与否,而且要想相等,还必须两个字符串指向同一个地址。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-12-24
比较字符可以直接使用==比较操作符,如:
char c1='a',c2='b';
if(c1==c2) printf("%c is same as %c.",c1,c2);
else printf("%c is different to %c",c1,c2);

若是字符串,则需要使用字符串函数了,strcmp
char s1[]="abc",s2[]="xyz";
if(strcmp(s1,s2)==0) printf("%s is same as %s.",s1,s2);
也可以忽略大小写来比较,使用函数stricmp 中间的i意思是ignore case sensitive
还可以指定长度比较,strncmp,如:
char s1[]="abc",s2[]="abcdefg";
if(strncmp(s1,s2,3)==0) printf("first 3 characters are same");
若不是从开头位置开始比较,如:
char s1[]="abc",s2[]="xyzabc"
if(strncmp(s1,&s2[3],3)==0) 就是比较s1和s2的第3个字符开始的内容
第2个回答  2013-09-25
后者比较的只是他的首地址,首地址是存放字符串的首地址,是一个整形,是一个无法预知的地址,能比较的对吗?。。srecmp函数是自带的比较函数。
第3个回答  2013-09-25
==是进行值的比较。strcmp是进行地址的比较。