Cómo concatenar la variable char * en C

#include  #include  #include  int main() { char *hi = "bye"; char *bye = "abc"; strcat(hi, bye); printf("%s\n", hi); } 

¿Cómo concatenaré estas variables? Todo lo que estoy intentando lo choca

Usted no puede Los literales de cadena no son modificables.

Puedes hacerlo si haces una copia de la misma que sea modificable. Aquí la matriz de caracteres se inicializa con el contenido de la cadena literal.

 char hi[10]="bye"; ... 

Esto funcionará.

En su caso, utilizando strcat en el literal de cadena, está invocando un comportamiento indefinido.

Desde 6.4.5p7

No se especifica si estas matrices son distintas siempre que sus elementos tengan los valores adecuados. Si el progtwig intenta modificar dicha matriz, el comportamiento es indefinido .

También desde J2: listados de comportamiento indefinido de estándar

El progtwig intenta modificar una cadena literal.


Tenga en cuenta que incluso si la cadena literal fuera modificable, tampoco sería un comportamiento definido concatenar cadenas. Mientras concatena cadenas, asegúrate de que la cadena en la que estás concatenando tenga suficiente espacio; de lo contrario, intentaría escribir más allá de la matriz de caracteres, que a su vez invocará un comportamiento indefinido. Una cosa que puedes ver por ti mismo a la luz de lo que dije en este párrafo (matriz de caracteres inicializada con el valor de la cadena literal),

 char hi[]="bye"; 

Luego, usar strcat conduciría a un comportamiento indefinido.

La cadena literal es inmutable . Cualquier bash de modificarlo invoca un comportamiento indefinido .

Podrá modificarlo si almacena la cadena de destino en una matriz:

 int main() { char hi[10] = "bye"; char *bye = "abc"; strcat(hi, bye); printf("%s\n", hi); } 

Citando el proyecto de norma C N1570, sección 6.4.5 / 7:

No se especifica si estas matrices son distintas siempre que sus elementos tengan los valores adecuados. Si el progtwig intenta modificar dicha matriz, el comportamiento es indefinido.

Consulte más en ¿Por qué aparece un error de segmentación al escribir en una cadena inicializada con “char * s” pero no “char s []”?