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

时间:2010-03-25 01:27:21

标签: c string strcmp

我有以下代码:

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

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

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

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

谢谢!

编辑:我正在以下列方式阅读buf: read(0, buf, MAXBUFLEN);

5 个答案:

答案 0 :(得分:5)

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

如果您想与\nh进行比较,最后为什么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"));