Acceda a la ubicación de escritura de infracción al leer el carácter mediante scanf_s

Sigo corriendo hacia una “ubicación de escritura de infracción de acceso” cuando bash leer una expresión como 3 + 5

 #include  add(double a, double b, int prec); int main() { int prec; double a, b; char oper; printf("Enter Precision: "); scanf_s("%d", &prec); if (prec<0) { printf("This is not a valid precision value"); } printf("%d", prec); printf("Enter Expression: "); scanf_s("%lf %c %lf", &a, &oper, &b); … } 

Según MSDN, ya que está utilizando la función scantf_s con formato %c , debe especificar la longitud del búfer de caracteres:

A diferencia de scanf y wscanf, scanf_s y wscanf_s requieren que se especifique el tamaño del búfer para todos los parámetros de entrada de tipo c, C, s, S o conjuntos de control de cadena que están incluidos en []. El tamaño del búfer en caracteres se pasa como un adicional parámetro inmediatamente después del puntero al búfer o variable.

Así que la llamada al método correcto sería:

 scanf_s("%lf %c %lf", &a, &oper, 1, &b);