首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strcmp不工作

strcmp不工作
EN

Stack Overflow用户
提问于 2009-06-09 01:16:06
回答 4查看 33.5K关注 0票数 10

我知道这可能是一个完全陌生的问题(我已经很长一段时间没有接触C语言了),但是有人能告诉我为什么它不工作吗?

代码语言:javascript
复制
printf("Enter command: ");
bzero(buffer,256);
fgets(buffer,255,stdin);

if (strcmp(buffer, "exit") == 0)
    return 0;

如果我输入"exit“,它不会进入if,这与"buffer”的长度有关吗?

有什么建议吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-09 01:20:10

您想要这样做:

strcmp(buffer, "exit\n")

也就是说,当您输入字符串并按" enter“时,换行符将成为buffer的一部分。

或者,使用strncmp(),它只比较字符串的n个字符

票数 28
EN

Stack Overflow用户

发布于 2009-06-09 01:17:27

fgets()返回字符串"exit\n“--与get()不同,它保留换行符。

票数 9
EN

Stack Overflow用户

发布于 2009-06-09 01:46:51

正如其他人所说,与"exit"进行比较是失败的,因为fgets()在缓冲区中包含了换行符。它的一个保证是缓冲区将以换行符结束,除非输入的行对于缓冲区来说太长,在这种情况下它不会以换行符结束。fgets()还保证缓冲区是nul终止的,因此不需要将256字节清零,只需让fgets()使用255即可获得该保证。

比较精确到"exit\n"的简单答案是,用户不会不小心在单词前后添加空格。如果您希望强制用户小心使用exit命令,这可能无关紧要,但通常可能会引起用户的反感。

使用strncmp()可能允许"exited""exit42"等在您可能不需要它们的地方进行匹配。这可能对您不利,特别是如果某些有效命令是其他有效命令的前缀字符串。

在一般情况下,将I/O、标记化、解析和操作分成各自的阶段通常是一个好主意。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/967745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档