我刚刚开始学习c并且我想尝试strcmp函数,但它总是给我结果“1”,如果我运行它。无论我键入什么字符串。由于第一个字符串比第二个字符串短,因此我期望“-1”。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char array1[]="na";
char array2[]="kskkjnkjnknjd";
int i;
i= strcmp(array1,array2);
printf(" %d", i);
return 0;
}
我也已经试图摆脱i变量并只写“printf(”%d“,strcmp(array1,array2));并用%u替换%d,但也无效。我'我已经在网上搜索并试图为自己搞清楚,可能只是一个简单的错误,如果有人可以提供帮助,我会很高兴。:)
答案 0 :(得分:0)
strcmp
几乎总是用以下等价物编码:
int strcmp(char *s1, char *s2)
{
for(; *s1 && *s2; s1++, s2++)
{
int res = *s1-*s2;
if (res)
return res;
}
return *s1-*s2;
}
它返回第一个不同的比较字符之间的差异,这确保结果符合两个字符串关系==
<
>
。
当字符串长度不同时,返回值是较短字符串的\0
字符串结尾与另一字符串对应字符的位置之间的差值。因此结果也应反映长度差异。
根本不要指望0,1和-1。
答案 1 :(得分:-1)
看看这个小程序,它的结构类似于你自己的程序。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char array1[]="a";
char array2[]="b";
int i;
i = strcmp(array1,array2);
printf(" %d\n", i);
return 0;
}
编译并运行它,它返回一个负整数。 (它在我的gcc框中返回-1。)
因为&#34; strcmp函数返回负,零或正整数,具体取决于s1指向的对象是否小于,等于或大于s2指向的对象&#34;