C 中的 strcasecmp 返回 156 而不是 0,有什么想法吗?

发布于 2024-08-26 20:40:41 字数 409 浏览 7 评论 0原文

我有以下代码:

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

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

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

当 buf 等于 Hh 时,应该 strcasecmp 不返回 0 ?知道为什么它返回 156 吗?我需要弄清楚如何检查用户是否输入 Hh

谢谢!

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

I have the following code:

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

And I get the following results when I try plugging in different letters:

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

Should strcasecmp not return 0 when buf is equal to H or h? Any ideas why it's returning 156? I need to figure out how to check whether the user types H or h.

Thanks!

Edit: I'm reading buf in the following way:
read(0, buf, MAXBUFLEN);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

望她远 2024-09-02 20:40:41
printf("num: %d\n", strcasecmp(buf, "h"));

如果要与 hH 进行比较,为什么要在末尾添加 \n


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

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

Why \n at the end, if you want to compare with h or H ?


main(){
 char *s = "hH";
 printf("%d\n", strcasecmp(s, "Hh"));
}

0


read() also stores whitespace. So, if you are using read, compare with "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

I entered h in the above case.

Also, use strncasecmp if you want to compare a fixed number of characters.

好听的两个字的网名 2024-09-02 20:40:41

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

Try comparing it to "h\r\n" - if you are on windows, both \r and \n will end a line.

怎会甘心 2024-09-02 20:40:41

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"));
}

read does not put a zero at the end. It just deals with arrays of bytes, and knows nothing about null-terminated strings. So do like this:

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"));
}
眼前雾蒙蒙 2024-09-02 20:40:41

buf 是否包含尾随换行符?

Does buf contain a trailing newline?

丢了幸福的猪 2024-09-02 20:40:41

你尝试过吗

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

Have you tried

printf("num: %d\n", strcasecmp(buf, "h"));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文