web-dev-qa-db-fra.com

C++ convertir char en const char *

En gros, je veux juste passer en boucle dans une chaîne de caractères extraire chacun d'eux et chacun d'eux doit être de type const char * pour que je puisse le transmettre à une fonction. Heres un exemple. Merci de votre aide.

    string thestring = "abc123";
    const char* theval;
    string result;

    for(i = 0; i < thestring.length(); i++){
        theval = thestring[i]; //somehow convert this must be type const char*
        result = func(theval);
    }
10
user1054513
string sym(1, thestring[i]);
theval = sym.c_str();

Il donne un caractère const * terminé à zéro pour chaque caractère.

15
dimitri

Vous pouvez prendre l'adresse de cet élément:

theval = &thestring[i];
19
Luchian Grigore

J'imagine que l'appel func s'attend à une chaîne C comme entrée. Dans ce cas, vous pouvez effectuer les opérations suivantes:

string theString = "abc123";
char tempCString[2];
string result;

tempCString[1] = '\0';

for( string::iterator it = theString.begin();
     it != theString.end(); ++it )
{
   tempCString[0] = *it;
   result = func( tempCString );
}

Cela produira une petite chaîne C (tableau de caractères terminé par un caractère nul) qui aura une longueur de 1 pour chaque itération.

La boucle for peut être réalisée avec un index (comme vous l'avez écrit) ou avec les itérateurs (comme je l'ai écrit) et le résultat sera identique. Je préfère l'itérateur juste pour la cohérence avec le reste de la STL.

Un autre problème à noter ici (bien que cela puisse simplement résulter de la généralisation du code) est que la variable result sera écrasée à chaque itération.

4
Greyson

Habituellement, un const char * pointe vers une chaîne complète terminée par un caractère null, pas un seul caractère. Je me demande donc si c'est vraiment ce que vous voulez faire.

Si c'est vraiment ce que vous voulez, la réponse est simple:

theval = &thestring[i];

Si la fonction attend vraiment une chaîne mais que vous voulez lui transmettre une chaîne d'un seul caractère, une approche légèrement différente est appelée:

char theval[2] = {0};
theval[0] = thestring[i];
result = func(theval);
4
Mark Ransom

Vous pouvez conserver l'adresse de cet élément:

theval = &thestring[i];

0
Piyush Kumar