una sirve que para concatenar caracteres caracter cadenas cadena c++ c string-concatenation

c++ - sirve - con concatenación const char*



concatenar un caracter a una cadena en c (12)

Conectar dos punteros de char constante sin usar el comando strcpy en la asignación dinámica de memoria:

const char* one = "Hello "; const char* two = "World!"; char* three = new char[strlen(one) + strlen(two) + 1] {''/0''}; strcat_s(three, strlen(one) + 1, one); strcat_s(three, strlen(one) + strlen(two) + 1, two); cout << three << endl; delete[] three; three = nullptr;

Necesito concatenar dos caracteres de const como estos:

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

¿Cómo puedo hacer eso?

Me pasaron estos caracteres de una biblioteca de terceros con una interfaz C, así que no puedo usar std::string lugar.


En primer lugar, debe crear un espacio de memoria dinámico. Entonces puedes poner las dos cuerdas en él. O puede usar la clase c ++ "string". La forma C de la vieja escuela:

char* catString = malloc(strlen(one)+strlen(two)+1); strcpy(catString, one); strcat(catString, two); // use the string then delete it when you''re done. free(catString);

Nueva forma C ++

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


En su ejemplo, uno y dos son punteros de caracteres, que apuntan a constantes de caracteres. No puede cambiar las constantes de caracteres apuntadas por estos punteros. Entonces algo así como:

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

no trabajará. En su lugar, debe tener una variable separada (matriz de caracteres) para contener el resultado. Algo como esto:

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.


La forma C:

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

La forma C ++:

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

La forma de tiempo de compilación:

#define one "hello " #define two "world" #define concat(first, second) first second const char* buf = concat(one, two);


Parece que estás usando C ++ con una biblioteca C y, por lo tanto, debes trabajar con const char * .

Sugiero envolver esos const char * en std::string :

const char *a = "hello "; const char *b = "world"; std::string c = a; std::string d = b; cout << c + d;


Puedes usar strstream . Está formalmente obsoleto, pero sigue siendo una gran herramienta si necesitas trabajar con cadenas C, creo.

char result[100]; // max size 100 std::ostrstream s(result, sizeof result - 1); s << one << two << std::ends; result[99] = ''/0'';

Esto escribirá one y luego two en la secuencia, y anexará una terminación /0 usando std::ends . En caso de que ambas cadenas puedan terminar escribiendo exactamente 99 caracteres, por lo que no quedará espacio para escribir /0 , escribimos uno manualmente en la última posición.


Si no conoce el tamaño de las cadenas, puede hacer algo como esto:

#include <stdio.h> #include <string.h> #include <stdlib.h> int main(){ const char* q1 = "First String"; const char* q2 = " Second String"; char * qq = (char*) malloc((strlen(q1)+ strlen(q2))*sizeof(char)); strcpy(qq,q1); strcat(qq,q2); printf("%s/n",qq); return 0; }


Si usa C ++, ¿por qué no usa std::string lugar de cadenas estilo C?

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

Si necesita pasar esta cadena a una función C, simplemente pase three.c_str()


Un ejemplo más:

// calculate the required buffer size (also accounting for the null terminator): int bufferSize = strlen(one) + strlen(two) + 1; // allocate enough memory for the concatenated string: char* concatString = new char[ bufferSize ]; // copy strings one and two over to the new buffer: strcpy( concatString, one ); strcat( concatString, two ); ... // delete buffer: delete[] concatString;

Pero a menos que específicamente no desee o no pueda usar la biblioteca estándar de C ++, usar std::string es probablemente más seguro.


Usando std::string :

#include <string> std::string result = std::string(one) + std::string(two);


Actualización: string total = string(one) + string(two); modificada string total = string(one) + string(two); a string total( string(one) + two ); por razones de rendimiento (evita la construcción de la cadena dos y el total de cadenas temporales)

const char *one = "Hello "; const char *two = "World"; string total( string(one) + two ); // OR: string total = string(one) + string(two); // string total(move(move(string(one)) + two)); // even faster? // to use the concatenation in const char* use total.c_str()


const char* one = "one"; const char* two = "two"; char result[40]; sprintf(result, "%s%s", one, two);