Programa que produce un error de bus al leer usando scanf – Programa en C
Estoy escribiendo un programa para una base de datos de empleados y estoy escribiendo la función para agregar a un empleado. Estoy obteniendo un error de bus después de mi última solicitud para escanear información. Estoy bastante seguro de que tiene que ver con mi declaración de scanf ya que tengo una declaración de impresión justo después de esa que no está imprimiendo. ¿Por qué estaría obteniendo este error?
La solicitud en cuestión es para leer el título del trabajo.
void addEmployee(void)
{
char *name;
char gender;
int age;
char *title;
printf("Ingrese el nombre: \n");
scanf(" %100s", name);
scanf("%*[^\n]%*c");
printf("Ingrese el género: \n");
scanf(" %1c", &gender);
scanf("%*[^\n]%*c");
printf("Ingrese la edad: \n");
scanf(" %d", &age);
scanf("%*[^\n]%*c");
printf("Ingrese el título del trabajo: \n");
scanf(" %100s", title);
scanf("%*[^\n]%*c");
printf("Prueba");
printf("El empleado que ha ingresado es: %s %c %d %s \n", name, gender, age, title);
Employee newEmp = {*name, gender, age, *title};
if(employeeList[0] == NULL)
{
employeeList[0] = &newEmp;
nodeCount++;
}
}
davy.ai
El problema parece estar en la variable
title
, que se ha declarado como un puntero pero no se le ha asignado memoria para contener la entrada. Cuando se utilizascanf
para leer una cadena, es necesario asignar memoria para que se almacene la entrada. En este caso, se puede utilizarmalloc
para asignar memoria a la cadena y después utilizarscanf
para leer la entrada.Una forma de solucionar el error es declarar
title
como un array de tamaño fijo:Alternativamente, se podría asignar memoria a
title
utilizandomalloc
:Recuerda liberar la memoria cuando termines de usarla.