I wonder my code works perfectly fine either using strcmp
or simply ==
in C++ for comparing 2 char arrays. Can any one justify the reason of using strcmp
instead of ==
;

- 49,413
- 29
- 133
- 174

- 343
- 2
- 4
- 10
-
7Do you have an example of your code that works fine with both `==` and `strcmp`? – Mar 22 '14 at 03:16
-
char abc1[10] = "Apple"; char abc2[10]="Mango"; if (abc1 == abc2) cout << "Equal "; else cout << "Not equal"; – Fawad Nasim Mar 22 '14 at 03:37
-
However now I get clear that == points to same location. i was confusing with NotEqual result. – Fawad Nasim Mar 22 '14 at 03:38
2 Answers
strcmp
compares the actual C-string
content, while using ==
between two C-string
is asking if these two char
pointers point to the same position.
If we have some C-string
defined as following:
char string_a[] = "foo";
char string_b[] = "foo";
char * string_c = string_a;
strcmp(string_a, string_b) == 0
would return true
, while string_a == string_b
would return false
. Only when "comparing" string_a
and string_c
using ==
would return true
.
If you want to compare the actual contents of two C-string
but not whether they are just alias of each other, use strcmp
.
For a side note: if you are using C++
instead of C
as your question tag shows, then you should use std::string
. For example,
std::string string_d = "bar";
std::string string_e = "bar";
then string_d == string_e
would return true
. string_d.compare(string_e)
would return 0
, which is the C++
version of strcmp
.
-
-
3+1 beat me to it due to writing an example to show OP. No need to write another answer since you got it all already, just gonna leave the example [here](http://coliru.stacked-crooked.com/a/ce953c82def955ae) (with variables renamed to your versions). – AliciaBytes Mar 22 '14 at 03:42
One advantage of using strcmp is that....it will return < 0 if str1 is less than str2
0 if str1 is greater than str2 and 0 if they are equal.
but if you use simply == it will only return either true or false.

- 3,075
- 6
- 32
- 63