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
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