elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema de ejecución en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema de ejecución en C  (Leído 1,680 veces)
Gerardovf78

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Problema de ejecución en C
« en: 25 Junio 2015, 15:10 pm »

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:

Código:
#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:


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema de ejecución en C
« Respuesta #1 en: 25 Junio 2015, 15:18 pm »

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.


En línea

Gerardovf78

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Problema de ejecución en C
« Respuesta #2 en: 25 Junio 2015, 15:29 pm »


Código:
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]
« Última modificación: 25 Junio 2015, 15:44 pm por Gerardovf78 » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema de ejecución en C
« Respuesta #3 en: 25 Junio 2015, 15:50 pm »

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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema de ejecución
Programación C/C++
blue_net 4 2,300 Último mensaje 24 Julio 2013, 15:11 pm
por blue_net
Problema en ejecucion
Programación C/C++
vaneexd 2 2,412 Último mensaje 19 Noviembre 2013, 02:43 am
por rir3760
Problema de ejecucion de .bat y de scripts
.NET (C#, VB.NET, ASP)
jlewis09 1 1,709 Último mensaje 17 Noviembre 2015, 19:19 pm
por _TTFH_3500
Problema con ejecución de .bat ayuda
Scripting
MC.cover 1 1,777 Último mensaje 12 Enero 2016, 07:45 am
por Eleкtro
problema en ejecucion: ahorcado
Programación C/C++
priskot17 0 1,294 Último mensaje 20 Octubre 2016, 21:14 pm
por priskot17
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines