Progtwig se bloquea con 0xC0000005

He estado intentando ejecutar mi código pero siempre termina con el código de error 0xC0000005

#include  #include  void calculate_resistance(char metal, int length, int diameter, float resistivity); int main() { int length, diameter; float resistivity; char metal; printf("Enter the name of the metal: "); scanf("%s", &metal); printf("Enter the resistivity: "); scanf("%f", &resistivity); printf("Enter the length: "); scanf("%d", &length); printf("Enter the diameter: "); scanf("%d", &diameter); calculate_resistance(metal, length, diameter, resistivity); return 0; } void calculate_resistance(char metal, int length, int diameter, float resistivity) { float radius = diameter / 2; float area_of_wire = (M_PI) * pow(radius,2) * length; float resistance = resistivity * length / area_of_wire; printf("Resistivity of %s is %f", metal, resistance); } 

Descubrí que si comento “printf (” La resistividad de% s es% f “, metal, resistencia); o cualquier printf después del último scanf no se bloqueará con el código de error 0xC0000005

 char metal; 

Declara una sola char . Puede almacenar un solo personaje. Desea almacenar una colección de caracteres, es decir, una cadena . Asi que usa

 char metal[50]; /* Can store a max of 49 chars +1 for the \0 */ 

Después de eso, deja fuera el & desde

 scanf("%s", &metal); 

porque el nombre de una matriz se convierte en un puntero a su primer elemento ya. Para mayor seguridad, puede evitar un modificador de longitud en el especificador de formato que indica el número máximo de caracteres menos 1 (1 espacio reservado para el terminador NUL):

 scanf("%49s", metal); 

Además, debe proporcionar más comprobaciones de errores y también verificar si todos los scanf son exitosos al ver su valor de retorno. No se olvide de cambiar char metal a char metal[] o char* metal en la statement y definición de la función, ya que no está pasando un solo carácter, sino la matriz (en realidad, el puntero a su primer elemento porque las matrices “decaen “).

 char metal; printf("Enter the name of the metal: "); scanf("%s", &metal); 

Este código invoca un comportamiento indefinido. Usted está tratando de almacenar la secuencia de caracteres en la variable de un char . Debe usar el especificador de formato %c o una matriz de caracteres.

El metal variable es un char. Esto tiene solo 1 carácter. Es necesario mantener una serie de caracteres.

 char metal[100]; 

Por supuesto, 100 puede que no sea bueno para su caso, pero el uso de char y %s para scanf e printf causará problemas.