Comparing character arrays and string literals in C++
Solution 1:
Check the documentation for strcmp. Hint: it doesn't return a boolean value.
ETA: ==
doesn't work in general because cstr1 == cstr2
compares pointers, so that comparison will only be true if cstr1
and cstr2
point to the same memory location, even if they happen to both refer to strings that are lexicographically equal. What you tried (comparing a cstring to a literal, e.g. cstr == "yes"
) especially won't work, because the standard doesn't require it to. In a reasonable implementation I doubt it would explode, but cstr == "yes"
is unlikely to ever succeed, because cstr
is unlikely to refer to the address that the string constant "yes"
lives in.
Solution 2:
std::strcmp
returns 0 if strings are equal.
Solution 3:
strcmp returns a tri-state value to indicate what the relative order of the two strings are. When making a call like strcmp(a, b), the function returns
- a value < 0 when a < b
- 0 when a == b
- a value > 0 when a > b