сравнение между строковым литералом

Это очень простой код:

#include <iostream>

using namespace std;

void exec(char* option)
{
    cout << "option is " << option << endl;
    if (option == "foo")
        cout << "option foo";
    else if (option == "bar")
        cout << "opzion bar";
    else
        cout << "???";
    cout << endl;
}

int main()
{
    char opt[] = "foo";
    exec(opt);
    return 0;
}

генерировать два предупреждения: сравнение со строковым литералом приводит к неопределенному поведению.

Можете ли вы объяснить, почему именно этот код не работает, но если я изменю

char opt[]

в

char *opt

это работает, но выдает предупреждение? Это связано с завершением \ 0? В чем разница между двумя декларациями opt? Что если я использую константный квалификатор? Решение состоит в том, чтобы использовать std :: string?

Ответы на вопрос(5)

Ваш ответ на вопрос