two strings sintaxis lenguaje concatenate concatenar c string char concatenation strcat

strings - strcat concat a char en una cuerda?



strcat on c (6)

Ambas cadenas deben ser terminadas en nulo. Una única char no termina en nulo, por lo que no está definida cuando strcat dejará de concatenar caracteres hasta el final. Además, la cadena debe contener al menos suficiente espacio para la cadena original y la cadena resultante.

Esto funciona:

char string[10] = ""; char* currentChar = "B"; strcat(string, currentChar);

Usando GDB, me parece que recibo una falla de segmentación cuando intento esta operación:

strcat(string,&currentChar);

Dado que la cadena se inicializa como

char * string = "";

y currentChar es

char currentChar = ''B'';

¿Por qué esto resulta en una falla de segmentación?

Si strcat no se puede usar para esto, ¿de qué otra forma puedo concat un char en una cadena?


Como &currentChar no es una cadena, no termina con el carácter /0 . Debe definir B como char *currentChar = ''B''; . También de acuerdo con http://www.cplusplus.com/reference/clibrary/cstring/strcat, la string debe tener suficiente espacio para contener la cadena de resultados (2 bytes en este caso), pero solo tiene 1 byte.

O si quiere usar char , puede hacer algo como (dependiendo de su código):

char string[256]; ... char currentChar = ''B''; size_t cur_len = strlen(string); if(cur_len < 254) { string[cur_len] = currentChar; string[cur_len+1] = ''/0''; } else printf("Not enough space");


Como respondieron otros, & currentChar es un puntero a char o char * , pero una cadena en C es char [] o const char * .

Una forma de usar strcat para concatenar un char en una cadena es crear una cadena mínima y usarla para transformar un char en una cadena.

Ejemplo:

Hacer una cadena simple, con solo 1 carácter y el sufijo ''/ 0'' ;

char cToStr[2]; cToStr[1] = ''/0'';

Aplicando a su pregunta:

char * string = ""; char currentChar = ''B'';

cToStr asumirá la cadena "B":

cToStr[0] = currentChar;

¡Y Strcat funcionará!

strcat ( string, cToStr );


Creo que el método más simple (no eficiente) sería sprintf

sprintf(str, "%s%c", str, chr);


El primer argumento de strcat debe tener espacio suficiente para contener el resto de la cadena. "" es una cadena constante y, como tal, GCC no asigna espacio.

Hazlo una matriz con suficiente espacio:

char buf[1024]; strcat(buf, ""); strcat(buf, "B");


strcat () toma dos cadenas terminadas en ''/ 0''. Cuando pase la dirección de un personaje, la rutina observará la memoria que sigue al personaje, buscando el terminador.

Como no sabes a qué se refiere esa memoria, deberías esperar problemas cuando tu código acceda a ella.

Además de eso, su argumento de cadena no tiene espacio para tener ningún carácter agregado al mismo. ¿Dónde está escrito ese recuerdo? Intentará escribir más allá del final de la memoria asociada a esta cadena.