Question

I have got two strings (string literals in that case), say

char *name        = "Fotis";
char *second_name = "Fotis";

and I have two ways to compare them, which are both giving me an accurate result. The first one is with the equality operator (==), likewise:

if (name == second_name)
    printf ("Great success!\n");

and the second one is through the strcmp function available in string.h:

if (strcmp (name, second_name) == 0)
    printf ("Great success!\n");

My question is: Which one of the two is the most {efficient | idiomatic} way to compare two strings in C? Is there another, more idiomatic way?

Was it helpful?

Solution

The second way with strcmp is correct, the first way using == is incorrect because it's only comparing the value of pointers, not the contents of the strings.

The two strings that you compare happen to be both string literals, they may, and may not have the same pointer value by the standard.

OTHER TIPS

The natural way would be to use strcmp since it's more accurate.

Your first method using == is comparing the pointers, so it will only return true if the two are exactly the same char array, meaning they point to the same piece of memory. The other method using strcmp is the way you would do this, because it is comparing the actual content of the strings. So it can return true even if the two strings are in different locations in memory.

The reason your first method is appearing to work correctly is because the two variables are pointing to the same string literal, so they basically point to the same location in memory when they're the same string, and different locations when they're different strings. If you used malloc to allocate memory for those strings, and set their contents, then they would point to different locations in memory, so your first method would return false and the second would return true for the same string of text.

if (name == second_name)
    printf ("Great success!\n");

Watch out: you're comparing pointers equality with this one, not the strings' texts.

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