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等于H
或h
时, strcasecmp
不应该返回0吗? 任何想法为什么它返回156? 我需要弄清楚如何检查用户是否键入H或h 。
谢谢!
编辑:我正在通过以下方式读取buf: read(0, buf, MAXBUFLEN);
printf("num: %d\n", strcasecmp(buf, "h"));
为什么\n
最后,如果你想与h
或H
比较?
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"));