比较两个字符串,strcmp的问题

时间:2013-10-20 15:32:07

标签: c strcmp strcpy

我正在尝试检查从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:”之后会发生什么,我只是想确定命令是如何给出的。我做错了什么?

4 个答案:

答案 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)

c中的

字符串库<string.h>包含两个函数strcmp(s1,s2)strcmpi(s1,s2)strcmp函数无法按长度比较字符串。 它比较字符串的第一个字符的ascii值,如果我提供s1="Login"s2="Sign out",则它返回负值,因为'L'的ascii小于'S'的ascii。 如果第一个字符与用于检查第二个字符的字符相同。