C - Strcmp() 不工作
C - Strcmp() not working
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
const int SIZE = 100;
char input[SIZE];
while(1)
{
fgets (input, SIZE - 2, stdin); // input
printf("%d", strcmp(input, "exit")); //returining 10 instead of 0
if(strcmp(input, "exit") == 0)
{
printf("SHELL Terminated\n");
exit(0);
}
return 0;
}
我遇到了问题。如果我在 input
变量中输入 exit,函数 strcmp()
returns 10
,但它应该 return 0
并退出程序,因为 exit 等于 exit。但事实并非如此。
我找不到问题。
你得到 10
因为你的输入字符串中有一个换行符。 10
return 值是该换行符的 ascii 值与您要比较的 "exit"
字符串文字的终止空字符之间的差异。
fgets
将换行符 (\n
) 附加到读入缓冲区的字符串末尾。
使用
删除它
char* newline = strchr(input, '\n');
if (newline)
*newline = '[=10=]';
, 某些 fgets
的调用可能不会在缓冲区中设置换行符,因此我们需要检查是否 strchr
returns NULL
(未找到换行符)。
函数 fgets
还包括换行符 '\n'
,如果数组中有足够的 space,则对应于例如按下的 Enter 键。
您应该通过以下方式删除它
fgets( input, SIZE, stdin );
input[strcspn( input, "\n" )] = '[=10=]';
或更安全
if ( fgets( input, SIZE, stdin ) != NULL ) input[strcspn( input, "\n" )] = '[=11=]';
考虑到这段代码
*strchr(input, '\n') = '[=12=]';
通常是无效的,因为换行符可以在数组中不存在,函数 strchr
将 return NULL
.
fgets()
保留 '\n'
。您可以将其从 input
中删除(参见其他答案)或将其添加到文字
strcmp(input, "exit\n")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
const int SIZE = 100;
char input[SIZE];
while(1)
{
fgets (input, SIZE - 2, stdin); // input
printf("%d", strcmp(input, "exit")); //returining 10 instead of 0
if(strcmp(input, "exit") == 0)
{
printf("SHELL Terminated\n");
exit(0);
}
return 0;
}
我遇到了问题。如果我在 input
变量中输入 exit,函数 strcmp()
returns 10
,但它应该 return 0
并退出程序,因为 exit 等于 exit。但事实并非如此。
我找不到问题。
你得到 10
因为你的输入字符串中有一个换行符。 10
return 值是该换行符的 ascii 值与您要比较的 "exit"
字符串文字的终止空字符之间的差异。
fgets
将换行符 (\n
) 附加到读入缓冲区的字符串末尾。
使用
删除它char* newline = strchr(input, '\n');
if (newline)
*newline = '[=10=]';
fgets
的调用可能不会在缓冲区中设置换行符,因此我们需要检查是否 strchr
returns NULL
(未找到换行符)。
函数 fgets
还包括换行符 '\n'
,如果数组中有足够的 space,则对应于例如按下的 Enter 键。
您应该通过以下方式删除它
fgets( input, SIZE, stdin );
input[strcspn( input, "\n" )] = '[=10=]';
或更安全
if ( fgets( input, SIZE, stdin ) != NULL ) input[strcspn( input, "\n" )] = '[=11=]';
考虑到这段代码
*strchr(input, '\n') = '[=12=]';
通常是无效的,因为换行符可以在数组中不存在,函数 strchr
将 return NULL
.
fgets()
保留 '\n'
。您可以将其从 input
中删除(参见其他答案)或将其添加到文字
strcmp(input, "exit\n")