Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/06/2006, 14:35
pitukilloloco
 
Fecha de Ingreso: mayo-2006
Mensajes: 40
Antigüedad: 18 años, 7 meses
Puntos: 0
Evidentemente todavia no manejas bien el concepto de apuntadores. Sin animo de ofender, te aconsejaria que consiguieras un libro de C basico y te repasaras bien el(los) capitulo(s) que trate(n) sobre apuntadores.
Un error es que no asignas espacio en memoria para la estructura persona. Puedes resolverlo de dos maneras: o declaras la variable personas como del tipo de la estructura (o sea que no sea apuntador) asi
Código:
persona personas;
en cuyo caso ya no usarias el operador -> para referirte a uno de los campos, sino el operador punto, o sea, que en vez de escribir
Código:
personas->nombre="entrada";
escribirias
Código:
personas.nombre="entrada";
o solicitas memoria dinamica a traves de la funcion malloc (declarada en <stdlib.h>) asi
Código:
personas = (persona *)malloc (sizeof (persona);
solo que haciendolo de esta manera tendrias que llamar despues a la funcion free (personas) cuando ya no uses esta variable.

Por otra parte, a pesar de que la linea
Código:
personas->nombre="entrada";
tecnicamente no tiene errores, ya que cuando pones una cadena constante directamente en el codigo el compilador crea espacio de memoria y pasa un apuntador al comienzo de ella, esta no es la manera en que rellenas un campo de alguna estructura del tipo que declaraste, y generalmente durante el transcurso del programa actualizas los valores de los campos, por lo que tendrias el mismo problema mencionado anteriormente, que es que no asignas memoria en el campo para almacenar el nombre. Por ejemplo, si yo quisiera leer un nombre desde el teclado y pasarselo al campo nombre asi
Código:
scanf ("%s", personas->nombre);
el programa compilaria bien pero "tronaria" en tiempo de ejecucion. Y otra vez, o aparto memoria en la definicion de la estructura para este campo, o despues solicito memoria dinamica con la funcion malloc