我知道这可能是一个完全陌生的问题(我已经很长一段时间没有接触C语言了),但是有人能告诉我为什么它不工作吗?
printf("Enter command: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
if (strcmp(buffer, "exit") == 0)
return 0;如果我输入"exit“,它不会进入if,这与"buffer”的长度有关吗?
有什么建议吗?
发布于 2009-06-09 01:20:10
您想要这样做:
strcmp(buffer, "exit\n")
也就是说,当您输入字符串并按" enter“时,换行符将成为buffer的一部分。
或者,使用strncmp(),它只比较字符串的n个字符
发布于 2009-06-09 01:17:27
fgets()返回字符串"exit\n“--与get()不同,它保留换行符。
发布于 2009-06-09 01:46:51
正如其他人所说,与"exit"进行比较是失败的,因为fgets()在缓冲区中包含了换行符。它的一个保证是缓冲区将以换行符结束,除非输入的行对于缓冲区来说太长,在这种情况下它不会以换行符结束。fgets()还保证缓冲区是nul终止的,因此不需要将256字节清零,只需让fgets()使用255即可获得该保证。
比较精确到"exit\n"的简单答案是,用户不会不小心在单词前后添加空格。如果您希望强制用户小心使用exit命令,这可能无关紧要,但通常可能会引起用户的反感。
使用strncmp()可能允许"exited"、"exit42"等在您可能不需要它们的地方进行匹配。这可能对您不利,特别是如果某些有效命令是其他有效命令的前缀字符串。
在一般情况下,将I/O、标记化、解析和操作分成各自的阶段通常是一个好主意。
https://stackoverflow.com/questions/967745
复制相似问题