2

我有以下代码:

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

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

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

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

谢谢!

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

4

5 回答 5

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

为什么\n最后,如果你想比较hor 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如果要比较固定数量的字符,请使用。

于 2010-03-25T01:31:26.397 回答
2

尝试将其与"h\r\n"- 如果您在 Windows 上,两者都\r\n结束一行。

于 2010-03-25T01:50:34.347 回答
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"));
}
于 2010-03-25T02:24:59.193 回答
1

是否buf包含尾随换行符?

于 2010-03-25T01:29:39.613 回答
1

你有没有尝试过

printf("num: %d\n", strcasecmp(buf, "h"));
于 2010-03-25T01:31:53.383 回答