为什么strcmp不能用于c?

时间:2017-07-08 19:42:56

标签: c function strcmp

我刚刚开始学习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,但也无效。我'我已经在网上搜索并试图为自己搞清楚,可能只是一个简单的错误,如果有人可以提供帮助,我会很高兴。:)

2 个答案:

答案 0 :(得分:0)

libc中的

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;