strcasecmp没有返回零

strcasecmp没有返回零,c,C,我想知道为什么strcasecmp()在我第一次使用时返回0,但在第二次使用时却没有返回 在本例中,我特别将“hello world”输入到标准输入中。 它不是打印0,而是打印0 10。我有以下代码 #include "stdio.h" #include "string.h" int main(void) { char input[1000]; char *a; fgets(input, 1000, stdin); a = strtok(input, " "); pr

我想知道为什么strcasecmp()在我第一次使用时返回0,但在第二次使用时却没有返回

在本例中,我特别将“hello world”输入到标准输入中。 它不是打印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;
}

我做错了什么

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

如果您使用
strtok(输入“\n”)而不是
strtok(输入“”)程序将正常运行。事实上,您可能还想使用制表器作为标记分隔符

整个计划将是:

#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;
}

可能
a
将有一个新行字符。调试器可以确认this@EdHeal我现在觉得自己很愚蠢。非常感谢!请记住,标准C中没有名为
strcasecmp()
的函数。您的标记需要指定该函数(例如linux)。如果不是重复的,则与此相关。