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.

Función recursiva para imprimir cadenas

Tengo el siguiente código:

#incluir <stdio.h>
void recursividad(char ptr) {
if(
ptr!=’J’) recursividad(ptr++);
printf(“%c”,*ptr);
}

void main() {
char v[]=”!zenaJ”;
char *ptr=v;
recursividad(ptr);
}

Me gustaría devolver Janez! a través de la función recursiva. No tengo errores al compilar. Cuando ejecuto el programa obtengo un error “Segmentation fault (core dumped)”. ¿Qué estoy haciendo mal?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema en el código se encuentra en el operador de post-incremento utilizado en la llamada recursiva. En la línea “recursion (ptr++)”, el operador de post-incremento incrementa el puntero después de que ha sido utilizado en la llamada a la función, y el nuevo puntero apunta a una ubicación de memoria que puede no ser accesible. Esto conduce a un error de violación de segmento.

    Para solucionarlo, podemos usar el operador de pre-incremento en lugar del operador de post-incremento en la llamada recursiva. El código actualizado será:

    #include <stdio.h>
    
    void recursion(char *ptr) {
        if (*ptr != 'J') {
            recursion(++ptr);
        }
        printf("%c", *ptr);
    }
    
    int main() {
        char v[] = "!zenaJ";
        char *ptr = v;
        recursion(ptr);
        return 0;
    }
    

    Este código mostrará “Janez!” como se esperaba. Tenga en cuenta que la función principal devuelve un valor entero y debe tener una declaración de retorno.</stdio.h>

Comments are closed.