我用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
Run Code Online (Sandbox Code Playgroud)int strcmp( const char *lhs, const char *rhs );返回值
如果lhs在字典顺序中出现在rhs之前,则为负值.
如果lhs和rhs相等则为零.
如果在按字典顺序排列的rhs之后出现lhs,则为正值.
正如你所看到的那样只是消极,零或正面.你不能指望别的什么.
您链接的网站不正确.它告诉你返回值是< 0,== 0或者> 0它给出了一个例子并显示了它的输出.它不告诉输出应该是 111.
引用手册页:
如果发现s1(或其前n个字节)分别小于,匹配或大于s2,则strcmp()和strncmp()函数将返回小于,等于或大于零的整数。 。
换句话说,您绝对不应依赖的确切返回值strcmp(0当然不是)。唯一的保证是,如果第一个字符串“较小”,则返回值将为负;如果第一个字符串“较大”或0相等,则返回值为正。相同的输入可能会在使用的不同实现的不同平台上产生不同的结果strcmp。