C中的strcasecmp返回156而不是0,任何想法为什么?

我有以下代码:

printf("num: %d\n", strcasecmp(buf, "h\n")); 

当我尝试插入不同的字母时,我得到以下结果:

 a: -7 g: -1 i: 1 j: 2 h: 156 H: 156 

当buf等于Hh时, strcasecmp不应该返回0吗? 任何想法为什么它返回156? 我需要弄清楚如何检查用户是否键入Hh

谢谢!

编辑:我正在通过以下方式读取buf: read(0, buf, MAXBUFLEN);

 printf("num: %d\n", strcasecmp(buf, "h")); 

为什么\n最后,如果你想与hH比较?


 main(){ char *s = "hH"; printf("%d\n", strcasecmp(s, "Hh")); } 

0


read()也存储空格。 因此,如果您使用read ,请与“h \ n”进行比较。

 main(){ char *buf = malloc(sizeof(char)*10); read(0, buf, 10); printf("%s %d %d\n", buf, strcasecmp(buf, "h\n"), strcasecmp(buf, "h")); } 

H
H
0 10

我在上述情况下进入了h

另外,如果要比较固定数量的字符,请使用strncasecmp

尝试将它与"h\r\n" – 如果你在Windows上, \r\n都会结束一行。

read不会在结尾处放零。 它只处理字节数组,对空终止字符串一无所知。 所以这样做:

 char buf[MAXBUFLEN+1]; int readResult = read(0, buf, MAXBUFLEN); if(readResult < 0) { // handle error } else { buf[readResult] = 0; printf("num: %d\n", strcasecmp(buf, "h\n")); } 

buf是否包含尾随换行符?

你有没有尝试过

 printf("num: %d\n", strcasecmp(buf, "h"));