通过scanf_s读取字符时访问冲突写入位置

时间:2016-02-18 04:54:26

标签: c

我一直遇到一个"访问违规写入位置"每当我尝试阅读3 + 5

等表达式时
#include <stdio.h>

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);
    …
}

1 个答案:

答案 0 :(得分:7)

根据MSDN,由于您使用Gemfile.lock格式的scantf_s函数,您必须指定字符缓冲区长度:

  

与scanf和wscanf不同,scanf_s和wscanf_s要求为所有包含在[]中的c,C,s,S或字符串控件集的输入参数指定缓冲区大小。以字符为单位的缓冲区大小紧跟在指向缓冲区或变量的指针之后的附加参数。

所以正确的方法调用是:

%c