Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

665
Vistas
¿Por qué obtengo un resultado incorrecto para la cadena de origen cuando estoy implementando strcat ()?

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 hyam
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Su 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á).

over 4 years ago · Santiago Trujillo Denunciar

0

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";
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda