strcmp()在C中完全返回什么?

Akh*_*Raj 3 c string strcmp

我用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);
}
Run Code Online (Sandbox Code Playgroud)

控制台打印值是1还是字符和字符ASCII值之间的差值,即111?在这个网站上写道,这应该给出111,但当我在我的笔记本电脑上运行时,它显示1.为什么?o\0

bol*_*lov 16

来自cppreference.com文档

int strcmp( const char *lhs, const char *rhs );
Run Code Online (Sandbox Code Playgroud)

返回值

  • 如果lhs在字典顺序中出现在rhs之前,则为负值.

  • 如果lhs和rhs相等则为零.

  • 如果在按字典顺序排列的rhs之后出现lhs,则为正值.

正如你所看到的那样只是消极,零或正面.你不能指望别的什么.

您链接的网站不正确.它告诉你返回值是< 0,== 0或者> 0它给出了一个例子并显示了它的输出.它不告诉输出应该是 111.


Mur*_*nik 5

引用手册页:

如果发现s1(或其前n个字节)分别小于,匹配或大于s2,则strcmp()和strncmp()函数将返回小于,等于或大于零的整数。 。

换句话说,您绝对不应依赖的确切返回值strcmp0当然不是)。唯一的保证是,如果第一个字符串“较小”,则返回值将为负;如果第一个字符串“较大”或0相等,则返回值为正。相同的输入可能会在使用的不同实现的不同平台上产生不同的结果strcmp