Buenas, estoy intentando hacer un programa que cree una lista y que permita introducir un número de teléfono, un nombre y una edad, sin embargo, aunque compile, se crashea nada más ejecutarlo.
El código es el siguiente:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
struct Datos{
char *nombre;
int edad;
double telef;
struct Datos *sig;
};
typedef struct Datos miembro;
miembro *CrearMiembro(miembro *Lista, double telefono, int años, char name){
miembro *NuevoMiembro, *aux;
NuevoMiembro = (miembro *) malloc(sizeof(miembro));
if(NuevoMiembro != NULL){
NuevoMiembro->edad = años;
NuevoMiembro->telef = telefono;
NuevoMiembro->nombre = name;
NuevoMiembro->sig = NULL;
}
if (Lista == NULL){
Lista = NuevoMiembro;
}
else{
aux = Lista;
while(aux->sig != NULL){
aux = aux->sig;
}
aux = NuevoMiembro;
}
return Lista;
}
void ImprimirLista(miembro *Lista){
miembro *aux;
aux = Lista;
printf("La Lista contiene los siguientes datos: \n");
while(aux!=NULL){
printf("Edad: %d Telefono: %d Nombre: %s -> \n", aux->edad, aux->telef, aux->nombre);
aux = aux->sig;
}
printf("NULL");
}
int main(){
miembro *Lista1;
char Nombre[20];
int age;
double teleph;
Lista1->edad = 19;
Lista1->telef = 657485748;
Lista1->nombre = {"Alfonso"};
Lista1->sig = NULL;
printf("Indique el nombre que quiere introducir: ");
scanf("%s", Nombre);
printf("\n");
fflush(stdin);
printf("Indique el telefono: ");
scanf("%d", &teleph);
printf("\n");
printf("Indique la edad: ");
scanf("%d", &age);
Lista1 = CrearMiembro(Lista1, teleph, age, *Nombre);
ImprimirLista(Lista1);
system("PAUSE");
}
Creo que tiene que ver con la igualación de una cadena a un puntero, pero no sé solucionarlo. :huh:
Busca la línea exacta que da el problema colocando pausas al programa.
A todo esto, normaliza la forma de nombrar variables, estructuras y funciones. Poner variables con mayusculas, otras con minusculas y otras con caracteres como 'ñ' puede dar problemas, desde problemas de legibilidad, hasta pequeños problemas al compilar.
miembro *CrearMiembro(miembro *Lista, double telefono, int años, char name){
miembro *NuevoMiembro, *aux;
NuevoMiembro = (miembro *) malloc(sizeof(miembro));
if(NuevoMiembro != NULL){
NuevoMiembro->edad = años;
NuevoMiembro->telef = telefono;
//NuevoMiembro->nombre = name;
NuevoMiembro->sig = NULL;
El problema está en la línea comentada, y es el siguiente:
[Error] invalid conversion from 'char' to 'char*' [-fpermissive]
Pero dijiste que lo habías compilado :/
En cualquier caso, name es un char. No tendría que ser un char. En todo caso un char*.
Para copiar un char no basta un '='. Debes asignarle memoria con malloc(), y luego copiar caracter a caracter, hasta encontrar un '\0'.
Sinó, también puedes usar strcpy(), pero tendrás que utilizarle malloc() antes igualmente. El tamaño a copiar lo puedes obtener con strlen(), que calcula caracteres hasta el '\0'. Tendrás que sumarle 1 al strlen() para añadir el '\0' en la nueva cadena.
Y no olvides liberar memoria antes de liberar la estructura.