J'ai besoin de concaténer deux caractères const comme ceux-ci:
const char *one = "Hello ";
const char *two = "World";
Comment pourrais-je faire ça?
Je suis passé ces char*
s d'une bibliothèque tierce avec une interface C donc je ne peux pas simplement utiliser à la std::string
place.
c++
c
string-concatenation
Anthoni Caldwell
la source
la source
strcpy
et lesstrcat
appels, j'ai pensé que cela avait du sens de changer les balises.Réponses:
Dans votre exemple, un et deux sont des pointeurs char, pointant vers des constantes char. Vous ne pouvez pas modifier les constantes char vers lesquelles pointent ces pointeurs. Donc quelque chose comme:
ne fonctionnera pas. Au lieu de cela, vous devriez avoir une variable distincte (tableau de caractères) pour contenir le résultat. Quelque chose comme ça:
la source
strcpy(one,two);
devrait êtrestrcat(one,two);
(pas que cela le rend correct, comme vous le faites remarquer correctement).sprintf(dest,"%s%s",one,two)
et oublier la copie?La voie C:
La manière C ++:
La méthode de compilation:
la source
Si vous utilisez C ++, pourquoi n'utilisez-vous pas à la
std::string
place des chaînes de style C?Si vous devez passer cette chaîne à une fonction C, passez simplement
three.c_str()
la source
Utilisation
std::string
:la source
Mise à jour: changé
string total = string(one) + string(two);
enstring total( string(one) + two );
pour des raisons de performances (évite la construction de la chaîne deux et le total de la chaîne temporaire)la source
Encore un exemple:
Mais à moins que vous ne vouliez ou ne puissiez pas spécifiquement utiliser la bibliothèque standard C ++, l'utilisation
std::string
est probablement plus sûre.la source
new
. Et s'il peut l'utiliser, il devrait l'utiliserstd::string
, comme vous le dites.Il semble que vous utilisez C ++ avec une bibliothèque C et que vous devez donc travailler avec
const char *
.Je suggère de les envelopper
const char *
dansstd::string
:la source
Tout d'abord, vous devez créer un espace mémoire dynamique. Ensuite, vous pouvez simplement y insérer les deux chaînes. Ou vous pouvez utiliser la classe "string" c ++. La voie C à l'ancienne:
Nouvelle méthode C ++
la source
Si vous ne connaissez pas la taille des chaînes, vous pouvez faire quelque chose comme ceci:
la source
Vous pouvez utiliser
strstream
. C'est formellement obsolète, mais c'est toujours un excellent outil si vous devez travailler avec des chaînes C, je pense.Cela écrira
one
, puistwo
dans le flux, et ajoutera une fin en\0
utilisantstd::ends
. Au cas où les deux chaînes pourraient finir par écrire exactement des99
caractères - il ne resterait donc plus d'espace d'écriture\0
- nous en écrivons une manuellement à la dernière position.la source
streambuf
sortie de direction dans un tampon de caractères utilisé avecostream
n'est pas trop difficile non plus.la source
Connexion de deux pointeurs de caractères constants sans utiliser la commande strcpy dans l'allocation dynamique de la mémoire:
la source