strcmp和==的区别?

Example:

    char alpha;
    scanf("%c", &alpha);
    if (strcmp(&alpha, "c") == 0) //if (alpha == 'c')
    {
        printf("same");
    }
    else
    {
        printf("different");
    }

man page上的 description也没有讲具体

The strcmp() function compares the two strings s1 and s2. It returns an integer less than, equal to, or greater than zero if s1 is found, respectively, to be less than, to match, or be greater than s2.

我谷歌了, 但只找到了http://stackoverflow.com/ques... , c 部分感觉不是很详细, 想在这里请教下大家这两者实现机制的区别与效率

阅读 9.8k
3 个回答

strcmp是用来判断char*类型的字符串是否相等的,char*字符串实际上就是字符串的首地址。
而==是直接判断左边和右边是否相等,如果用==来判断char*字符串的话,就是相当于比较他们的首地址,这当然无法判断字符串的值是否一致了。
而如果是std::string,因为已经重载了==运算符,所以可以直接用==进行比较。
另外std::string有const char*的构造函数,平时可以用string("abc") == "abc"是因为匹配string的==运算符时,后面的abc发生了隐式类型转换。

正好在写类似的代码,看到相关问题,这个问题虽然简单,但是对于初学者或者一些愿意深究探索学习的同学来说,可能存在类似疑问,所以我先把我现在写的代码(部分)列举,再讲解

if( (strcmp(c,"n")!=0) && (strcmp(c,"y")!=0))
                {
                    printf("\t\t\t请重新输入: ");
                    fflush(stdin); //清除缓冲区 
                }
                if( (strcmp(c,"n")==0) || (strcmp(c,"y")==0))
                {
                    break;
                }

这里有两句用到了strcmp,而且是与==一起用的。可以看出,strcmp是用来比较char字符串,即用于比较两个字符串常量,或比较数组和字符串常量,这里有个注意是,不能比较数字等其他形式的参数。当两个字符串不相等时,C标准没有规定返回值会是1 或 -1,只规定了正数和负数。
而==是判断左右两边的值是否相等(和数学上的定义也是一样的),整型和浮点型不过多介绍,在char类型情况下,比较的是他们的首地址,因此与strmp相比,两者有着很大差异。

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

推荐问题
宣传栏