donc j'essaie d'insérer le caractère, que j'ai obtenu à partir d'une chaîne, dans une autre chaîne. Ici, je mes actions: 1. Je veux utiliser simple:
someString.insert(somePosition, myChar);
2. J'ai une erreur, car l'insertion requiert (dans mon cas) char * ou string
3. Je convertis char en char * via stringstream:
stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);
4. Tout semble se compiler avec succès, mais le programme plante le
conversion >> myCharInsert;
ligne.
5. J'essaie de remplacer char * par une chaîne:
stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);
Tout semble aller bien, mais lorsque someAnotherString.at(someOtherPosition)
devient de l'espace, le programme plante.
Alors, comment dois-je procéder correctement?
Il existe un certain nombre de surcharges de std::string::insert
. La surcharge pour l'insertion d'un seul caractère a en fait trois paramètres:
string& insert(size_type pos, size_type n, char c);
Le deuxième paramètre, n
, est le nombre de fois où insérer c
dans la chaîne à la position pos
(c'est-à-dire le nombre de fois pour répéter le caractère. Si vous ne voulez insérer une instance du caractère, passez-en simplement une, par exemple,
someString.insert(somePosition, 1, myChar);
Le plus simple est de vous fournir une fonction qui transforme un caractère en chaîne. Il existe de nombreuses façons de procéder, telles que
string ToStr( char c ) {
return string( 1, c );
}
Ensuite, vous pouvez simplement dire:
someString.insert(somePosition, ToStr(myChar) );
et utilisez la fonction dans d'autres cas où vous voulez une chaîne mais avez un caractère.
- Tout semble se compiler avec succès, mais le programme plante le
conversion >> myCharInsert;
Le problème est que vous essayez de déréférencer (accès) myCharInsert
(déclaré en tant que char*
) Qui pointe vers un emplacement aléatoire en mémoire (qui peut ne pas se trouver dans l'espace d'adressage de l'utilisateur) et cela est un comportement indéfini (crash sur la plupart des implémentations).
[~ # ~] modifier [~ # ~]
Pour insérer un char
dans une chaîne, utilisez string& insert ( size_t pos1, size_t n, char c );
surcharge .
Extra
Pour convertir char
en un std::string
Lisez this answer