NULL终止了c_str()?

Par*_*roX 0 c++ string c-strings null-terminated

为什么使用is_it_valid_color("yellow")工作和输出FOUND IT但使用is_it_valid_color(x.c_str());不起作用?

我有一种感觉它与null终止字符串有关.控制台中的输出看起来相同:

color: 'yellow'
FOUND IT
color: 'yellow'
Run Code Online (Sandbox Code Playgroud)

.

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());
Run Code Online (Sandbox Code Playgroud)

Jon*_*ter 5

你不是在比较字符串,而是在比较字符串的指针.

第一个匹配,因为您的链接器已将两个字符串"黄色"合并到同一物理指针以节省内存.因此,他们的地址相同.

要比较实际的字符串本身,请使用strcmp()或类似.