Ubicación de escritura de violación de acceso 0x00D00000

¿Estoy tratando de escribir este sencillo progtwig que lee múltiples variables en una función de escaneo pero se lanza una excepción después de ingresar la entrada?

Edición: usé scanf inicialmente pero causa un error que dice que puede ser inseguro.

Excepción lanzada:

Excepción lanzada a 0x52DAB87C (ucrtbased.dll) en Program.exe: 0xC0000005: Ubicación de escritura de infracción de acceso 0x00D00000

#include  #include  void main() { char name[20]; int age; char gender; float income; printf("Enter     :"); scanf_s("%s %d %c %f", &name, &age, &gender, &income); printf("Name : %s", name); printf("Age : %d", age); printf("Gender : %c", gender); printf("Income : %.2f", income); system("pause"); } 

El especificador de formato %s para scanf / scanf_s espera un puntero al primer elemento de una matriz de char, es decir, un char * . En su lugar, está pasando la dirección de una matriz, en este caso un char (*)[20] . Esos tipos son incompatibles. Pasar el tipo incorrecto para un especificador de formato invoca un comportamiento indefinido .

En lugar de pasar en &name , pase en name . Cuando se pasa a una función, una matriz decae a un puntero hacia el primer elemento, por lo que este es el tipo adecuado.

 scanf_s("%19s %d %c %f", name, sizeof(name), &age, &gender, sizeof(gender), &income); 

También tenga en cuenta el especificador de longitud dado, que limita la cantidad de caracteres que se pueden leer para que no intente escribir más allá del final de la matriz.