Emplacement d’écriture des violations d’access lors de la lecture d’un caractère via scanf_s

Je continue à courir dans un “emplacement d’écriture de violation d’access” chaque fois que j’essaie de lire une expression telle que 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); … } 

Selon MSDN, puisque vous utilisez la fonction scantf_s avec le format %c , vous devez spécifier la longueur du tampon de caractères:

Contrairement à scanf et wscanf, scanf_s et wscanf_s exigent que la taille de la mémoire tampon soit spécifiée pour tous les parameters d’entrée de type c, C, s, S ou les ensembles de contrôles de chaîne inclus entre []. La taille de la mémoire tampon, exprimée en caractères paramètre suivant immédiatement le pointeur sur le tampon ou la variable.

Donc, un appel de méthode correct serait:

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