C++: insérez char dans une chaîne de caractères
j'essaie donc d'insérer le caractère, que j'ai obtenu d'une chaîne, dans une autre chaîne. Ici, j'ai mes actions: 1. Je veux utiliser simple:
someString.insert(somePosition, myChar);
2. J'ai eu une erreur, car insert nécessite (dans mon cas) char* ou string
3. Je suis la conversion de char à 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 être compilé avec succès, mais le programme plante le gets à
conversion >> myCharInsert;
ligne.
5.Je suis en train de remplacer char* avec de la ficelle:
stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);
Tout semble OK, mais quand someAnotherString.at(someOtherPosition)
devient espace, le programme s'écrase.
alors comment faire correctement?
3 réponses
Il y a un certain nombre de surcharges de std::string::insert
. La surcharge pour insérer un seul caractère a en fait trois paramètres:
string& insert(size_type pos, size_type n, char c);
le second paramètre,n
, est le nombre de fois afin d'insérer c
dans la chaîne en position pos
(c'est à dire, le nombre de répétitions du caractère. Si vous voulez seulement insérer une instance du caractère, passez-en 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 y a beaucoup de façons de le faire, comme
string ToStr( char c ) {
return string( 1, c );
}
alors vous pouvez simplement dire:
someString.insert(somePosition, ToStr(myChar) );
et utiliser la fonction dans d'autres cas où vous voulez une chaîne mais un char.
- tout semble être compilé avec succès, mais le programme plante le gets à
conversion >> myCharInsert;
Le problème, c'est que vous essayez de déréférencement(accès) myCharInsert
(déclaré comme un char*
) qui pointe vers un emplacement aléatoire dans la mémoire(qui pourrait ne pas être à l'intérieur de l'espace d'adresse de l'utilisateur) et qui le fait est un comportement non défini (plantage sur la plupart des implémentations).
EDIT
pour insérer un char
dans une chaîne utilisez string& insert ( size_t pos1, size_t n, char c );
surcharge.
Extra