Comparing character arrays and string literals in

2019-01-20 10:59发布

I have a character array and I'm trying to figure out if it matches a string literal, for example:

char value[] = "yes";
if(value == "yes") {
   // code block
} else {
   // code block
}

This resulted in the following error: comparison with string literal results in unspecified behavior. I also tried something like:

char value[] = "yes";
if(strcmp(value, "yes")) {
   // code block
} else {
   // code block
}

This didn't yield any compiler errors but it is not behaving as expected.

3条回答
一夜七次
2楼-- · 2019-01-20 11:37

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.

查看更多
Root(大扎)
3楼-- · 2019-01-20 11:46

std::strcmp returns 0 if strings are equal.

查看更多
冷血范
4楼-- · 2019-01-20 11:47

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
查看更多
登录 后发表回答