Question

I'm trying to check if the line read from stdin begins with "login:" but strcmp does not seem to work.

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");

I don't care what comes after "login:", i just want to make sure that's how the command is given. What am i doing wrong?

Was it helpful?

Solution

strcmp returns 0 if the two strings are exactly the same to accomplish what you want to do

Use :

strstr(s2 , "login:")

(It return NULL if the string doesn't exist in s2)

or

strncmp(s2 , "login:" , 6)

This will compare the first 6 characters (if s2 begins with "login:" , it will return 0)

OTHER TIPS

Every string in C is followed be a null terminator, which shows

when the end of a string occurs.

Right now, you're copying 6 letters from s1 to s2, which is

login:

this means that you aren't copying the null terminator.

So s2 isn't exactly going to be "login:" as you wanted it to be.

so I suggest rather using

strstr(s2, "login:")

to check if login: is contained in s2.

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");

You compare your String with "login" which includes the following characters: 'l''o''g''i''n'':''\0' So if the Strings should be equal there have to be a '\0' in s2. The following Code should work:

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")

string library <string.h> in c contains two functions strcmp(s1,s2) and strcmpi(s1,s2). strcmp function can not compare strings by length. it compares ascii values of first character of string and if i m providing s1="Login" and s2="Sign out" then it returns negative value because ascii of 'L' is less than ascii of 'S'. if first characters are same than it goes for checking 2nd.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top