为什么使用is_it_valid_color("yellow")
并输出FOUND IT
但不能使用is_it_valid_color(x.c_str());
?
我觉得这与以null结尾的字符串有关。在控制台中,输出看起来相同:
color: 'yellow'
FOUND IT
color: 'yellow'
。
const char *color_names[] = {"yellow", "green", "red"};
const int color_names_SIZE = 3;
void is_it_valid_color(const char* color) {
cout << "color: '" << color << "'" << endl;
for(int i = 0; i < color_names_SIZE; ++i) {
if(color == *(color_names + i)) {
cout << "FOUND IT" << endl;
break;
}
}
}
is_it_valid_color("yellow");
string x = "yellow";
is_it_valid_color(x.c_str());
最佳答案
您不是在比较字符串,而是在比较指向字符串的指针。
第一个匹配,因为您的链接器已将两个字符串“黄色”合并到同一物理指针以节省内存。因此,它们的地址比较相同。
要比较实际的字符串本身,请使用strcmp()
或类似的字符串。