es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La concatenación de dos cadenas mediante punteros no funciona.

Hice una función que concatena la cadena “t” al final de la cadena “s”, para mi ejercicio tengo que usar punteros para esto, así que lo hice de esta manera pero no está funcionando:

#include <stdio.h>

void strcat(char *s, char *t)
{
    while (*s++);

    for (*s = *t; *s = *t; s++, t++);
}

int main()
{
    char c[100] = "hello";
    char *w = " world\n";

    strcat(c, w);

    printf(c);

    return 0;
}

La salida de “c” siempre devuelve “hello” en lugar de “hello world\n”.</stdio.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay dos problemas con el código proporcionado que hacen que no funcione como se espera.

    1. El bucle while en la función “strcat” incrementa el puntero “s” una vez más antes de que comience la concatenación real. Esto significa que cuando el bucle “for” se ejecuta, sobrescribe el terminador nulo al final de “s” y continúa escribiendo más allá del final de la matriz. Esto puede causar un comportamiento indefinido.
    while (*s++);
    

    Para solucionar esto, cambia el bucle while para que solo compruebe si el carácter actual no es el terminador nulo y elimina la instrucción de incremento:

    while (*s != '\0')
    
    1. El bucle for utiliza el operador de asignación “=” en lugar del operador de igualdad “==” en la condición de prueba, lo que provoca un bucle infinito:
    for (*s = *t; *s = *t; s++, t++);
    

    Para solucionar esto, cambia el operador de igualdad por el correcto:

    for (*s = *t; *s == *t; s++, t++);
    

    Con estos cambios, el código corregido debería lucir así:

    “`
    #include <stdio.h>

    void strcat(char s, char *t)
    {
    while (
    s != ‘\0’)
    s++;

    for (*s = *t; *s == *t; s++, t++);
    

    }

    int main()
    {
    char c[100] = “hello”;
    char *w = ” world\n”;

    strcat(c, w);
    
    printf("%s", c);
    
    return 0;
    

    }
    “`</stdio.h>

Comments are closed.