Ver Mensaje Individual
  #7 (permalink)  
Antiguo 25/11/2006, 21:04
Avatar de Instru
Instru
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 3 meses
Puntos: 52
Estas un poco confundido, pero se notan las ganas de aprender.

char cadena[5];
char *p;
p=cadena // Esto si iria o no ?
p=(char *)malloc(sizeof(char));

Esto es incorrecto. porque primero, en las faqs yo menciono como un array como cadena[5] es lo mismo que un puntero tipo char con 6 localidades de memoria reservada.

entonces p=cadena lo unico que haria seria que p apunte justamente a cadena[0].
Si a p le umas 1 entonces aputnaria a cadena[1] y asi.
Incluso podrias usar p como array.
p[0]=algo;
que es igual que si pusieras
*p=algo de un byte(porque es char)

Pero si despues de p=cadena pones un malloc....imaginate que stas reservando memoria donde ya esta reservada...............

Lo ideal es lo que pusiste en la segunda cita.

char *p;
p=(char *)malloc(sizeof(char));

Con esto practicamente tienes un array de 1 elemento.

char *p;
p=(char *)malloc(sizeof(char)*5);

Con este lo tienes pero de 5 elementos.
Una vez hecho este malloc puedes usar p como si fuera un array:

p[0]=algo;
p[1]=algo;

Sòlo recuerda no pasarte de la memoria reservada porque si no tendrias problemas raros feos y bueno, dificiles de encontrar.

Te repito, en las faqs biene muy bien explicado el asunto de los errores con punteros.

Saludos