我有以下代码:
printf("num: %d\n", strcasecmp(buf, "h\n"));
当我尝试插入不同的字母时,我得到以下结果:
a: -7
g: -1
i: 1
j: 2
h: 156
H: 156
strcasecmp
当 buf 等于H
or时不应返回 0 h
?任何想法为什么它返回156?我需要弄清楚如何检查用户是否键入H或h.
谢谢!
编辑:我正在通过以下方式阅读 buf :
read(0, buf, MAXBUFLEN);
printf("num: %d\n", strcasecmp(buf, "h"));
为什么\n
最后,如果你想比较h
or 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"));