我正在尝试检查从stdin读取的行是否以“login:”开头,但strcmp似乎不起作用。
char s1[20], s2[20];
fgets(s1, 20, stdin);
strncpy(s2,s1,6);
strcmp(s2, "login:");
if( strcmp(s2, "login:") == 0)
printf("s2 = \"login:\"\n");
else
printf("s2 != \"login:\"\n");
我不关心“login:”之后会发生什么,我只是想确定命令是如何给出的。我做错了什么?
答案 0 :(得分:5)
strcmp
将返回0以完成您想要的操作
使用:
strstr(s2 , "login:")
(如果NULL
)
s2
或
strncmp(s2 , "login:" , 6)
这将比较前6个字符(如果s2
以“login:”开头,它将返回0)
答案 1 :(得分:1)
C中的每个字符串都是一个空终止符,显示
当字符串结束时发生。
现在,您正在复制从s1到s2的6个字母,即
login:
这意味着您没有复制空终止符。
所以s2并不会像你想要的那样“登录:”。
所以我建议使用
strstr(s2, "login:")
检查登录名是否包含在s2中。
答案 2 :(得分:0)
char s1[20], s2[20];
fgets(s1, 20, stdin);
strncpy(s2,s1,6);
strcmp(s2, "login:");
if( strcmp(s2, "login:") == 0)
printf("s2 = \"login:\"\n");
else
printf("s2 != \"login:\"\n");
你将你的字符串与“login”进行比较,其中包括以下字符:'l''o'''''''n'':''\ 0'所以如果字符串应该相等则必须有s2中的'\ 0'。以下代码应该有效:
char s1[20], s2[20];
fgets(s1, 20, stdin);
strncpy(s2,s1,6);
s2[6]='\0'; //end of String
strcmp(s2, "login:");
if( strcmp(s2, "login:") == 0)
printf("s2 = \"login:\"\n");
else
printf("s2 != \"login:\"\n")
答案 3 :(得分:-1)
字符串库<string.h>
包含两个函数strcmp(s1,s2)
和strcmpi(s1,s2)
。
strcmp
函数无法按长度比较字符串。
它比较字符串的第一个字符的ascii值,如果我提供s1="Login"
和s2="Sign out"
,则它返回负值,因为'L'的ascii小于'S'的ascii。
如果第一个字符与用于检查第二个字符的字符相同。