Necesito concatenar dos caracteres constantes como estos:
const char *one = "Hello ";
const char *two = "World";
¿Cómo podría hacer eso?
Recibí estos char*
mensajes de una biblioteca de terceros con una interfaz C, por lo que no puedo usarlos simplemente std::string
.
c++
c
string-concatenation
Anthoni Caldwell
fuente
fuente
strcpy
ystrcat
llamadas, pensé que tenía sentido cambiar las etiquetas.Respuestas:
En su ejemplo, uno y dos son punteros char, apuntando a constantes char. No puede cambiar las constantes de caracteres a las que apuntan estos punteros. Así que algo como:
no trabajará. En su lugar, debe tener una variable separada (matriz de caracteres) para contener el resultado. Algo como esto:
fuente
strcpy(one,two);
debería serstrcat(one,two);
(no es que eso lo haga correcto, como señala correctamente).sprintf(dest,"%s%s",one,two)
y olvidas la copia?La forma C:
La forma C ++:
La forma en tiempo de compilación:
fuente
Si está usando C ++, ¿por qué no usa en
std::string
lugar de cadenas de estilo C?Si necesita pasar esta cadena a una función C, simplemente pase
three.c_str()
fuente
Usando
std::string
:fuente
Actualizado: cambiado
string total = string(one) + string(two);
astring total( string(one) + two );
por razones de rendimiento (evita la construcción de la cadena dos y la cadena temporal total)fuente
Un ejemplo más:
Pero a menos que específicamente no desee o no pueda usar la biblioteca estándar de C ++,
std::string
probablemente usar sea más seguro.fuente
new
. Y si puede usarlo, debería usarlostd::string
, como usted dice.Parece que estás usando C ++ con una biblioteca C y, por lo tanto, necesitas trabajar con
const char *
.Sugiero envolverlos
const char *
enstd::string
:fuente
En primer lugar, debe crear un espacio de memoria dinámico. Entonces puedes simplemente insertar las dos cadenas en él. O puede utilizar la clase "string" de c ++. La forma C de la vieja escuela:
Nueva forma de C ++
fuente
Si no conoce el tamaño de las cadenas, puede hacer algo como esto:
fuente
Puede utilizar
strstream
. Está en desuso formalmente, pero creo que sigue siendo una gran herramienta si necesitas trabajar con cadenas C.Esto escribirá
one
y luegotwo
en la secuencia, y agregará una terminación\0
usingstd::ends
. En caso de que ambas cadenas terminen escribiendo exactamente99
caracteres, por lo que no quedaría espacio para escribir\0
, escribimos una manualmente en la última posición.fuente
streambuf
salida de dirección en un búfer de caracteres utilizado conostream
tampoco es demasiado difícil.fuente
Conectando dos punteros de caracteres constantes sin usar el comando strcpy en la asignación dinámica de memoria:
fuente