comparaison entre la chaîne littérale

Ce code très simple:

#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érer deux avertissement: comparaison avec littéral de chaîne de résultats en non spécifiée comportement.

Pouvez-vous expliquer exactement pourquoi ce code ne fonctionne pas, mais si je change

char opt[]

à

char *opt

il fonctionne, mais génère de l'avertissement? Est-ce lié à l' \0 résiliation? Quelle est la différence entre les deux déclaration de l'opt? Que faire si j'utilise const qualificatif? La solution est d'utiliser std::string?

L'un des quelques doublons: stackoverflow.com/questions/1997778/...
Lorsque tu fais if (option == "toto")", vous êtes niot de la comparaison de deux chaînes de caractères -- vous êtes de la comparaison de deux les pointeurs

OriginalL'auteur Ruggero Turra | 2010-03-18