C中的strcasecmp返回156而不是0,知道为什么吗?

C中的strcasecmp返回156而不是0,知道为什么吗?,c,string,strcmp,C,String,Strcmp,我有以下代码: printf("num: %d\n", strcasecmp(buf, "h\n")); 当我尝试插入不同的字母时,我得到以下结果: a: -7 g: -1 i: 1 j: 2 h: 156 H: 156 当buf等于H或H时,stracecmp是否应不返回0?知道它为什么会回来吗?我需要弄清楚如何检查用户是键入H还是H 谢谢 编辑:我以以下方式阅读buf: read(0,buf,MAXBUFLEN)buf是否包含尾随换行符 printf("num: %d\n", strca

我有以下代码:

printf("num: %d\n", strcasecmp(buf, "h\n"));
当我尝试插入不同的字母时,我得到以下结果:

a: -7
g: -1
i: 1
j: 2
h: 156
H: 156
当buf等于
H
H
时,stracecmp是否应不返回0?知道它为什么会回来吗?我需要弄清楚如何检查用户是键入H还是H

谢谢

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

buf是否包含尾随换行符

printf("num: %d\n", strcasecmp(buf, "h"));
如果要与
h
h
进行比较,为什么要在结尾处添加
\n


0


read()
还存储空白。因此,如果您使用的是
read
,请与“h\n”进行比较

h
h
0 10

在上述情况下,我输入了h

另外,如果要比较固定数量的字符,请使用strncasecmp。

是否尝试过

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

尝试将其与
“h\r\n”
进行比较-如果您在windows上,则
\r
\n
都将结束一行。

read
不会在末尾加零。它只处理字节数组,对以null结尾的字符串一无所知。所以你要这样做:

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"));
}
charbuf[MAXBUFLEN+1];
int readResult=read(0,buf,MAXBUFLEN);
如果(读取结果<0)
{
//处理错误
}
其他的
{
buf[readResult]=0;
printf(“num:%d\n”,strcasecmp(buf,“h\n”);
}

您在
buf
中的阅读情况如何?谢谢,这很有效!我想问题在于我初始化buf的方式,在我试图比较的末尾一定有一些额外的字符。我不知道
read
函数(我认为它在Windows上甚至不可用),但是文本模式流将自动转换换行符。
printf("num: %d\n", strcasecmp(buf, "h"));
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"));
}