131 votes

const char * concaténation

J'ai besoin de concaténer deux caractères const de ce type:

 const char *one = "Hello ";
const char *two = "World";
 

Comment pourrais-je m'y prendre?

Je reçois ces char* s d'une bibliothèque tierce avec une interface en C, je ne peux donc pas simplement utiliser std::string place.

122voto

codaddict Points 154968

Dans votre exemple, un et deux sont des pointeurs de caractère, pointant vers des constantes de caractère. Vous ne pouvez pas modifier les constantes de caractère pointées par ces pointeurs. Donc, quelque chose comme:

 strcat(one,two); // append string two to string one.
 

ne fonctionnera pas. Au lieu de cela, vous devriez avoir une variable séparée (tableau de caractères) pour conserver le résultat. Quelque chose comme ça:

 char result[100];   // array to hold the result.

strcpy(result,one); // copy string one into the result.
strcat(result,two); // append string two to the result.
 

88voto

Idan K Points 10037

La voie C:

 char buf[100];
strcpy(buf, one);
strcat(buf, two);
 

La manière C ++:

 std::string buf(one);
buf.append(two);
 

La manière de compiler:

 #define one "hello "
#define two "world"
#define concat(first, second) first second

const char* buf = concat(one, two);
 

33voto

Prasoon Saurav Points 47488

Si vous utilisez C ++, pourquoi n'utilisez-vous pas std::string au lieu de chaînes de style C?

 std::string one="Hello";
std::string two="World";

std::string three= one+two;
 

Si vous devez passer cette chaîne à une fonction C, passez simplement three.c_str()

22voto

Gregory Pakosz Points 35546

Utilisation de std::string :

 #include <string>

std::string result = std::string(one) + std::string(two);
 

20voto

Pedro Reis Points 69
const char *one = "Hello ";
const char *two = "World";

string total = string(one) + string(two);

// to use the concatenation in const char* use
total.c_str()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X