2013-05-29 6 views
4

Salut tout le monde peut dire ce qui ne va pas avec ce code.Impossible de convertir 'std :: string' en 'const char *

string s=getString(); //return string 

    if(!strcmp(s,"STRING")){ 
     //Do something 
    } 

lors de la compilation Je reçois l'erreur comme

error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int strcmp(const char*, const char*)’| 
+2

Vous voulez 'if (s ==" STRING ")'. 'strcmp' est la version' const char * '. (Vous pouvez utiliser 'if (! Strcmp (s.c_str()," STRING ")', mais pas) – BoBTFish

+1

Avez-vous regardé la documentation de 'strcmp' pour voir quels arguments il accepte? utiliser 'strcmp' comme ça quand vous avez déjà' std :: string' qui définit 'operator =='? – Jon

+5

@BoBTFish '(s ==" STRING ")' dans ce cas – ForEveR

Répondre

17

strcmp accepte const char* comme argument. Vous pouvez utiliser la méthode c_str:

if(!strcmp(s.c_str(),"STRING")) 

Ou tout simplement utiliser une surcharge operator== pour std::string:

if(s == "STRING") 
+0

Je vais utiliser if (s == "STRING"), mais au lieu de cela, puis-je utiliser if (getString() == "STRING") – Haris

+0

Bien sûr, vous pouvez. – soon

+0

Mais quand je fais comme ça le programme n'entre pas dans la boucle if .... – Haris

11

Vous devez utiliser s.c_str() pour obtenir la version chaîne C d'un std::string, le long des lignes de:

if (!strcmp (s.c_str(), "STRING")) ... 

mais je ne sais pas pourquoi vous n'utilisiez pas simplement:

if (s == "STRING") ... 

qui est beaucoup plus lisible.

+0

Votre test est inversé. Le test '! Strcmp (...)' teste l'égalité, pas l'inégalité. – janm

+0

@stefan La réponse a été modifiée depuis que j'ai laissé mon commentaire. Regardez l'historique d'édition. – janm

1

Vous devez utiliser la fonction membre c_str() de std::string qui vous donne le tableau sous-jacent char, si vous souhaitez conserver la façon C de comparer les chaînes.

Sinon, vous devez utiliser le operator== qui peut tester l'égalité entre les chaînes et const char*.

5

Vous pouvez utiliser la méthode c_str() sur std::string comme dans les autres réponses.

Vous pouvez également faire ceci:

if (s == "STRING") { ... } 

Ce qui est plus claire et ne prétend pas que vous écrivez C.

1

Vous devez utiliser c_str() et il devrait résoudre votre problème.

+1

C'est un moyen, mais c'est le pire. – BoBTFish

Questions connexes