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,¤tChar);
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 ¤tChar
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.