Ce code très simple:comparaison entre chaîne littérale
#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;
}
génèrent deux avertissement: comparaison avec les résultats chaîne littérale dans un comportement non spécifié.
Pouvez-vous expliquer exactement pourquoi ce code ne fonctionne pas, mais si je change
char opt[]
à
char *opt
cela fonctionne, mais génère l'avertissement? Est-ce lié à la terminaison \ 0? Quelle est la différence entre les deux déclarations d'opt? Que faire si j'utilise const qualifier? La solution consiste à utiliser std :: string?
L'un des doublons: http://stackoverflow.com/questions/1997778/c-comparing-c-string-problem –
Lorsque vous faites 'if (option ==" foo ")', vous ne comparez pas deux chaînes - vous comparez deux * pointeurs * –