2012-02-21 11 views
5

Cuando trato de ejecutar el siguiente código obtengo un fallo seg. He intentado ejecutarlo a través de gdb, y entiendo que el error está ocurriendo como parte de llamar al printf, pero no sé por qué exactamente no está funcionando.El programa se bloquea cuando le doy a printf un puntero a una matriz de caracteres

#include <stdlib.h> 
#include <stdio.h> 

int main() { 
    char c[5] = "Test"; 
    char *type = NULL; 

    type = &c[0]; 
    printf("%s\n", *type); 
} 

Si sustituyo printf("%s\n", *type); con printf("%s\n", c); me sale "de prueba" impreso como lo esperaba. ¿Por qué no funciona con un puntero a la matriz de caracteres?

+2

Solo me gustaría señalar: "C" no se colgó porque C no es un programa. Tu compilador no se colgó. *** Usaste C para escribir un programa que falla. *** –

+1

Tienes razón, David. Sé lo que quería decir, y tú también, obviamente, pero es importante ser preciso al hablar de este tipo de cosas. – WhiteHotLoveTiger

+0

Cambie su '% s' a'% c' para ver el 'c [0]' – wulfgarpro

Respuesta

15

Estás pasando un simple char y printf está intentando desreferenciarlo. Tal vez puedas probar:

printf("%s\n", type); 
      ^

Si pasa *type es como decirle printf "Tengo una cadena en la posición T".

También type = &c[0] es un poco engañoso. ¿Por qué no simplemente:

type = c; 
+0

Gracias por la explicación clara. Justo cuando pensaba que estaba tomando el truco de los punteros, me di cuenta de que necesitaba revisarlos un poco más. – WhiteHotLoveTiger

5

¿No desreferenciar type. Debe seguir siendo un puntero.

4

Elimine la desreferenciación de type en su printf.

Cuestiones relacionadas