在C++中比较字符数组和字符串文字

blc*_*llo 5 c++ string-literals character-arrays

我有一个字符数组,我试图找出它是否匹配字符串文字,例如:

char value[] = "yes";
if(value == "yes") {
   // code block
} else {
   // code block
}
Run Code Online (Sandbox Code Playgroud)

这导致以下错误:与字符串文字比较导致未指定的行为.我也试过类似的东西:

char value[] = "yes";
if(strcmp(value, "yes")) {
   // code block
} else {
   // code block
}
Run Code Online (Sandbox Code Playgroud)

这不会产生任何编译器错误,但它的行为不符合预期.

Dav*_*ler 24

查看strcmp的文档.提示:它不返回布尔值.

ETA:==不一般的工作,因为cstr1 == cstr2比较指针,这样比较才会是真实的,如果cstr1cstr2指向同一个内存位置,即使他们碰巧都指的是字典顺序相同字符串.您尝试过的(比较cstring与文字,例如cstr == "yes")尤其不起作用,因为标准并不要求它.在一个合理的实现中,我怀疑它会爆炸,但cstr == "yes"不太可能成功,因为cstr不太可能引用字符串常量"yes"所在的地址.


Cat*_*lus 17

std::strcmp 如果字符串相等则返回0.