strcasecmp没有返回零

时间:2016-04-16 07:28:24

标签: c

我想知道为什么strcasecmp()在我第一次使用它时返回0但不是第二次。

在这个例子中,我特意将“hello world”输入标准输入。 而不是打印0 0它打印0 10.我有以下代码。

#include "stdio.h"
#include "string.h"

int main(void) {

  char input[1000];
  char *a;

  fgets(input, 1000, stdin);

  a = strtok(input, " ");
  printf("%d\n",strcasecmp(a,"hello"));  //returns 0 

  a = strtok(NULL, " ");
  printf("%d\n",strcasecmp(a,"world"));  //returns 10


  return 0;
}

我做错了什么?

1 个答案:

答案 0 :(得分:6)

您在hello world之后输入的换行符是world令牌的一部分,因为您使用空格作为标记分隔符。

如果使用strtok(input, " \n");代替strtok(input, " ");,程序将正常运行。实际上,您可能也希望使用制表符作为标记分隔符。

整个计划将是:

#include "stdio.h"
#include "string.h"

int main(void) {

  char input[1000];
  char *a;

  fgets(input, 1000, stdin);

  a = strtok(input, " \n\t");
  if (a == NULL) return(-1);
  printf("%d\n",strcasecmp(a,"hello"));
  a = strtok(NULL, " \n\t");
  if (a == NULL) return(-1);
  printf("%d\n",strcasecmp(a,"world")); 


  return 0;
}