C 中的 strcasecmp 返回 156 而不是 0,有什么想法吗?
我有以下代码:
printf("num: %d\n", strcasecmp(buf, "h\n"));
当我尝试插入不同的字母时,我得到以下结果:
a: -7
g: -1
i: 1
j: 2
h: 156
H: 156
当 buf 等于 H
或 h 时,应该
strcasecmp
不返回 0 ?知道为什么它返回 156 吗?我需要弄清楚如何检查用户是否输入 H 或 h。
谢谢!
编辑:我正在通过以下方式读取 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
如果要与
h
或H
进行比较,为什么要在末尾添加\n
?read()
还存储空格。因此,如果您使用read
,请与“h\n”进行比较。在上述情况下我输入了 h 。
另外,如果您想比较固定数量的字符,请使用
strncasecmp
。Why
\n
at the end, if you want to compare withh
orH
?read()
also stores whitespace. So, if you are usingread
, compare with "h\n".I entered h in the above case.
Also, use
strncasecmp
if you want to compare a fixed number of characters.尝试将其与
"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.read
不会在末尾添加零。它只处理字节数组,对空终止字符串一无所知。所以这样做: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:buf
是否包含尾随换行符?Does
buf
contain a trailing newline?你尝试过吗
Have you tried