我在用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或差ASCII
值o
和\0
字符即111? 在这个网站 ,它是写,这应该给了放111,但是当我在我的笔记本上运行它,它显示1.为什么?
从该cppreference.com文档
int strcmp( const char *lhs, const char *rhs );
返回值
如果LHS负值在字典顺序RHS之前出现。
零,如果LHS和RHS比较相等。
如果LHS在字典顺序RHS后出现正值。
正如你可以看到它只是说,负,零或正。 你不能指望别的。
您链接的网站是不是不正确。 它告诉你的是,返回值是< 0
== 0
或> 0
,它给出了一个例子,说明它的输出。 它不会告诉输出应为 111
。
引述手册页:
所述的strcmp()和STRNCMP()函数返回小于整数,等于或大于零,如果S1(或其前n个字节)被发现,分别为小于,以匹配或大于s2 。
换句话说,你不应该依赖于准确的返回值strcmp
(除0
,当然)。 唯一的保证是,返回值将是负的,如果第一个字符串是“小”,正面的,如果第一个字符串是“做大”还是0
,如果他们是平等的。 相同的输入可产生与不同的实施方式中不同的平台不同的结果strcmp
。
strcmp
返回如果字符串1是按字母顺序比字符串2较小“大于0更小的值”; zero
,如果它们是相等的; 和a“的值大于0”,如果串1是按字母顺序不是字符串2大。
输出取决于实现。 一个体面的贯彻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
,和正值表示,反之亦然。
int strcmp(const char *str1, const char *str2)
如果返回0则意味着两个字符串相等,如果它返回大于0次要的值则表示STR1小于STR2将返回一个值小于,等于或大于0。 如果返回值> 0则意味着STR2小于STR1。
你的返回值是1,因为“Heloooo”是一个性格比较则“Helloo”。 其实这个词Helloo有6个字符,Heloooo有7个字符。 整整一个多字符。
基本上, 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 ()