我想知道为什么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;
}
我做错了什么?
答案 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;
}