How do I properly compare strings in C?
I am trying to get a program to let a user enter a word or character, store it, and then print it until the user types it again, exiting the program. My code looks like this:
#include <stdio.h>
int main()
{
char input[40];
char check[40];
int i=0;
printf("Hello!\nPlease enter a word or character:\n");
gets(input); /* obsolete function: do not use!! */
printf("I will now repeat this until you type it back to me.\n");
while (check != input)
{
printf("%s\n", input);
gets(check); /* obsolete function: do not use!! */
}
printf("Good bye!");
return 0;
}
The problem is that I keep getting the printing of the input string, even when the input by the user (check) matches the original (input). Am I comparing the two incorrectly?
You can't (usefully) compare strings using !=
or ==
, you need to use strcmp
:
while (strcmp(check,input) != 0)
The reason for this is because !=
and ==
will only compare the base addresses of those strings. Not the contents of the strings themselves.
Ok a few things: gets
is unsafe and should be replaced with fgets(input, sizeof(input), stdin)
so that you don't get a buffer overflow.
Next, to compare strings, you must use strcmp
, where a return value of 0 indicates that the two strings match. Using the equality operators (ie. !=
) compares the address of the two strings, as opposed to the individual char
s inside them.
And also note that, while in this example it won't cause a problem, fgets
stores the newline character, '\n'
in the buffers also; gets()
does not. If you compared the user input from fgets()
to a string literal such as "abc"
it would never match (unless the buffer was too small so that the '\n'
wouldn't fit in it).