сравнение между строковым литералом
Это очень простой код:
#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?