我有以下代码:
printf("num: %d\n", strcasecmp(buf, "h\n"));
当我尝试插入不同的字母时,我得到以下结果:
a: -7
g: -1
i: 1
j: 2
h: 156
H: 156
当buf等于strcasecmp
或H
时,h
是否应该返回0?任何想法为什么它返回156?我需要弄清楚如何检查用户是否键入 H 或 h 。
谢谢!
编辑:我正在以下列方式阅读buf:
read(0, buf, MAXBUFLEN);
答案 0 :(得分:5)
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
0 10
在上述情况下我输入了 h 。
另外,如果要比较固定数量的字符,请使用strncasecmp
。
答案 1 :(得分:2)
尝试将其与"h\r\n"
进行比较 - 如果您使用的是Windows,则\r
和\n
都会结束一行。
答案 2 :(得分:2)
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"));
}
答案 3 :(得分:1)
buf
是否包含尾随换行符?
答案 4 :(得分:1)
你试过吗
printf("num: %d\n", strcasecmp(buf, "h"));