es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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++;
}

}

Tags:  , ,

Answer

  1. Avatar for 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 utiliza scanf para leer una cadena, es necesario asignar memoria para que se almacene la entrada. En este caso, se puede utilizar malloc para asignar memoria a la cadena y después utilizar scanf para leer la entrada.

    Una forma de solucionar el error es declarar title como un array de tamaño fijo:

    char title[100];
    

    Alternativamente, se podría asignar memoria a title utilizando malloc:

    char* title = malloc(100 * sizeof(char));
    

    Recuerda liberar la memoria cuando termines de usarla.

Comments are closed.