这是什么的strcmp()正是用C回来吗?这是什么的strcmp()正是用C回来吗?(What do

2019-05-12 10:24发布

我在用C写的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main()
{
    char string1[20];
    char string2[20];
    strcpy(string1, "Heloooo");
    strcpy(string2, "Helloo");
    printf("%d", strcmp(string1, string2));
    return(0);
}

应控制台之间打印值1或差ASCIIo\0字符即111? 在这个网站 ,它是写,这应该给了放111,但是当我在我的笔记本上运行它,它显示1.为什么?

Answer 1:

从该cppreference.com文档

 int strcmp( const char *lhs, const char *rhs ); 

返回值

  • 如果LHS负值在字典顺序RHS之前出现。

  • 零,如果LHS和RHS比较相等。

  • 如果LHS在字典顺序RHS后出现正值。

正如你可以看到它只是说,负,零或正。 你不能指望别的。

您链接的网站是不是不正确。 它告诉你的是,返回值是< 0 == 0> 0 ,它给出了一个例子,说明它的输出。 它不会告诉输出应为 111



Answer 2:

引述手册页:

所述的strcmp()和STRNCMP()函数返回小于整数,等于或大于零,如果S1(或其前n个字节)被发现,分别为小于,以匹配或大于s2 。

换句话说,你不应该依赖于准确的返回值strcmp (除0 ,当然)。 唯一的保证是,返回值将是负的,如果第一个字符串是“小”,正面的,如果第一个字符串是“做大”还是0 ,如果他们是平等的。 相同的输入可产生与不同的实施方式中不同的平台不同的结果strcmp



Answer 3:

strcmp返回如果字符串1是按字母顺序比字符串2较小“大于0更小的值”; zero ,如果它们是相等的; 和a“的值大于0”,如果串1是按字母顺序不是字符串2大。



Answer 4:

输出取决于实现。 一个体面的贯彻strcmp功能是:

int strcmp (const char * s1, const char * s2)
{
    for(; *s1 == *s2; ++s1, ++s2)
        if(*s1 == 0)
            return 0;
    return *(unsigned char *)s1 < *(unsigned char *)s2 ? -1 : 1;
}

上述实现返回-1,如果S1 <S2,1,如果S1> S2和0,如果S1 = S2。
但通常,有这对于实际使用中实现更快的版本:

int strcmp (const char * s1, const char * s2)
{
    for(; *s1 == *s2; ++s1, ++s2)
        if(*s1 == 0)
            return 0;
    return *(const unsigned char *)s1 - *(const unsigned char *)s2;
}

请注意,这是更快,因为它会跳过这是被以前做的分支。 因此,我们通常具有负的返回值意味着公约s1是字典顺序小于s2 ,和正值表示,反之亦然。



Answer 5:

int strcmp(const char *str1, const char *str2)

如果返回0则意味着两个字符串相等,如果它返回大于0次要的值则表示STR1小于STR2将返回一个值小于,等于或大于0。 如果返回值> 0则意味着STR2小于STR1。

你的返回值是1,因为“Heloooo”是一个性格比较则“Helloo”。 其实这个词Helloo有6个字符,Heloooo有7个字符。 整整一个多字符。



Answer 6:

基本上, strcmp()可以返回以下内容:

  • > 0 ,如果第二串比第1弦较小。

    char s1, s2; strcpy (s1, "helloworld"); strcpy (s2, "world"); int check = strcmp (s1, s2);

  • 0如果传递的字符串是相同的。

    char s1, s2; strcpy (s1, "hello"); strcpy (s2, "hello"); int check = strcmp (s1, s2);

    在这种情况下,作为字符串相等,检查将有0

  • < 0如果第一串比第二字符串小。

    char s1, s2; strcpy (s1, "hello"); strcpy (s2, "worldhello"); int check = strcmp (s1, s2);

所以你的情况, strcmp ()将返回1作为字符串不相等。

看看这个和这个教程有关strcmp ()



文章来源: What does strcmp() exactly return in C?
标签: c string strcmp