J'ai une chaîne C ++ a) Comment puis-je obtenir ce pointeur? p>
B) Y a-t-il une fonction équivalente à code>. J'ai besoin de transmettre cette chaîne à une fonction acceptant un paramètre char * code> (par exemple - strchr () code>). p>
strrschr () code> qui fonctionne pour c ++ strings code>? p>
8 Réponses :
Si STR dans votre chaîne utilise str.c_tr () code> méthode pour obtenir le char * à l'intérieur. P>
Êtes-vous sûr qu'il est c_tsr code> et non c_str code>? Je ne suis pas un expert C ++ mais j'ai googlé pour c_tsr code> et a été corrigé à c_str code>.
C code> équivalent de chaîne de
Le c ++ code> chaîne code> objet Utilisez c_str code>
fonction.
li>
- localiser la première occurrence d'un
Char code> dans une chaîne code> Utilisation de l'objet
Find_First_of code> fonction. Li>
Exemple: p> xxx pré> Remarque: j'ai donné le Strlen code> juste un exemple de fonction qui prend char * code> . p> ol>
@unicornaddict: merci. Maintenant, comment puis-je trouver les autres occurrences de ce caractère dans la chaîne? [La longueur de la chaîne est énorme, créant ainsi une nouvelle chaîne n'est pas une option]
@cambr: Il y a une version B> surchargée B> de Find_First_of CODE> qui accepte la position pour lancer la recherche de B> comme argument. J'ai posté un exemple ici: Ideone.com/beswl
Étonnamment, STD :; String a de loin, bien plus de capacités que des cordes de style C. Vous voulez probablement le Find_First_of () Méthode. En général, si vous vous trouvez à l'aide des fonctions Strxxx () sur C ++ STD :: Strings, vous faites presque quelque chose de mal. P>
J'aime une grande partie de la bibliothèque standard C ++, la classe de cordes est une bête complexe. Pour en tirer le meilleur parti, vous avez vraiment besoin d'un bon livre de référence. Je recommande La bibliothèque standard C ++ , par Nicolai Josuttis. P>
Si vous voulez juste affecter un littéral à chaîne à pw, vous pouvez le faire comme si vous avez un objet plus ici: Goodluck !! / p> p> char * pw = quelque_string.c_str () code> p> < p> Cependant, la valeur que PW pointe ne sera valable que pour la durée de vie de certains_string. P>
Comment attribuer une chaîne à char * pw in c ++ < / a> p>
blockQuote>
Tort. c_str () renvoie un const char *
Ce n'est pas une très bonne idée. Rien ne garantit que PW indiquera les mêmes données à un point ultérieur, même si quelqu'un est toujours autour. Il est beaucoup plus sûr d'appeler c_str () à chaque fonction que vous devez transmettre un caractère *.
Vous ne pouvez pas obtenir un Vous pouvez ensuite lancer le pointeur renvoyé par ces fonctions à Ce code: P> char * code> à partir d'une chaîne code> code> string code> ne vous permet pas d'accéder gratuitement à son tampon interne.
Le plus proche que vous puissiez obtenir est un const char * code> à l'aide de .c_str () code> si vous le souhaitez null terminé ou .Data () code> si cela ne Il faut être null terminé. p> Char * CODE> mais vous le faites sur vos propres risques. Cela étant dit qu'il s'agit d'une fonte relativement sûre à faire tant que vous vous assurez de ne pas changer la chaîne. Si vous avez changé, le pointeur obtenu de c_str () code> peut ne plus être valide. P> string str("Hello World!");
char* sp = (char*)str.c_str();
str = "Chaged string";
sp[5] = 'K';
+1 pour cela étant la réponse à la question i i> recherchait :)
Plus de discussion ici: bytes.com/topic/c/ Réponses / ...
std::string yourString("just an example");
char* charPtr = new char[yourString.size()+1];
strcpy(charPtr, yourString.c_str());
@Neil: C'est un exemple, jeez ... mais je l'ai modifié pour votre plaisir ;-)
Vous pouvez éviter la gestion de la mémoire manuelle en faisant std :: vecteur & CHRBUF [0] code> pour obtenir un char * code>.
Peut-être que cet exmaple vous aidera
La norme C ++ fournit deux fonctions de membre de CLAASS STD :: basic_string qui retourner le pointeur sur le premier élément de la chaîne. Ils sont comme pour la fonction Strchr, son premier paramètre est c_str () code> et données () code>. Mais le rendement de la const-à-bas, vous pouvez donc ne pas les utiliser avec une fonction de type char *. P>
const char * code>. Vous pouvez donc utiliser c_str () et des données () avec cette fonction. Cependant, il est beaucoup préférable d'utiliser la fonction de membre trouver () code> de classe sttd :: basique_string au lieu de strchr. Code> p> p>