Aquí intenté implementar la función strcat en C. El problema es que cuando estoy imprimiendo la cadena de origen, me muestra "hyam" no "shyam"
#include <stdio.h> #include <string.h> char *fun(char *target, const char *source) { printf("%s\n", source); int x = strlen(target); while (*source != '\0') { *(target + x++) = *source++; } *(target + x) = '\0'; return target; } int main() { char target[] = "ram"; char source[] = "shyam"; fun(target, source); printf("%s\n", target); printf("%s", source); return 0; } Aquí, en la última línea de salida, se muestra hyam , pero debería ser shyam .
shyam ramshyam hyamSu matriz de target es demasiado pequeña: necesita al menos nueve elementos (la longitud de ambas cadenas más un cero final).
Escribir fuera target tiene un comportamiento indefinido, pero en la práctica, parece que sus arreglos están dispuestos de extremo a extremo, así:
|r|a|m|\0|s|h|y|a|m|\0| ^ ^ | | target source y luego concatenas, pasando el final del target hacia la source :
|r|a|m|s|h|y|a|m|\0|\0| ^ ^ | | target source lo que hace que parezca que una 's' ha desaparecido.
(Tenga en cuenta que esto no está definido , por lo que puede pasar cualquier cosa. No puede confiar en este comportamiento, a menos que la documentación de su compilador diga que está bien y debería hacer esto. Lo que probablemente no sucederá).
El problema es el target de la matriz definido con char target[] = "ram"; es demasiado corto para acomodar la adición del contenido de la cadena de source . Debe hacer target más grande, al menos 9 bytes, 8 para los caracteres y uno más para el terminador nulo:
char target[9] = "ram";