comparação entre a string literal
Este código muito simples:
#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;
}
gere dois avisos: a comparação com resultados literais de cadeia de caracteres em comportamento não especificado.
Você pode explicar por que exatamente esse código não funciona, mas se eu mudar
char opt[]
para
char *opt
funciona, mas gera o aviso? Está relacionado à terminação \ 0? Qual é a diferença entre as duas declarações de opt? E se eu usar o qualificador const? A solução é usar std :: string?