C - Strcmp()不起作用

时间:2016-03-29 17:53:10

标签: c strcmp

input

我遇到了问题。如果我在strcmp()变量中输入退出,则函数10会返回0,但它应返回Compare-Object并退出程序退出等于退出。但事实并非如此。

我找不到问题。

4 个答案:

答案 0 :(得分:8)

您得到10,因为输入字符串中有换行符。 10返回值是该换行符的ascii值与您要比较的"exit"字符串文字的终止空字符之间的差异。

答案 1 :(得分:6)

函数fgets还包括新行字符'\n',如果数组中有足够的空格,则对应于按下的Enter键。

您应该删除它,例如以下方式

fgets( input, SIZE, stdin );
input[strcspn( input, "\n" )] = '\0';

或更安全

if ( fgets( input, SIZE, stdin ) != NULL ) input[strcspn( input, "\n" )] = '\0';

考虑到这段代码

*strchr(input, '\n') = '\0';

通常无效,因为数组中可能缺少新的换行符,而strchr函数将返回NULL

答案 2 :(得分:5)

fgets在读入缓冲区的字符串末尾添加换行符(\n)。

使用

删除它
char* newline = strchr(input, '\n');
if (newline)
    *newline = '\0';

As @WeatherVane mentioned,某些fgets调用可能未在缓冲区中设置换行符,因此我们需要检查strchr是否返回NULL(未找到换行符)。< / p>

答案 3 :(得分:4)

fgets()保留'\n'。您可以将其从input中删除(请参阅其他答案)或将其添加到文字

strcmp(input, "exit\n")