
25/11/2006, 21:04
|
 | | | 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 |