c scanf_s

时间:2019-04-27 12:13:20

标签: c visual-studio exception

我正在尝试编写一个简单的代码来输入int和char的值。 Visual Studio抛出异常

#include<stdio.h>
int main() {

    int i;
    char c;

    printf(" Enter the values");
    scanf_s("%c %d",&c,&i);

    return 0;
}

当我运行程序并输入值时,Visual Studio抛出一个异常,说:main.exe中的0x599C939E(ucrtbased.dll)抛出异常:0xC0000005:访问冲突写入位置0x0032133E

2 个答案:

答案 0 :(得分:3)

您需要指定要分配给char的内存大小。

 scanf_s("%c %d",&c,1,&i);

不会返回任何错误。 由于scanf()函数有点“不安全”,因此VS会强制您使用scanf_s函数,这是一个更安全的选择。 这样,用户将无法欺骗输入。

答案 1 :(得分:1)

对于格式说明符c and s,需要在参数列表中的相应指针之后指定缓冲区的大小。

在您的情况下,函数调用看起来像

scanf_s("%c %d",&c, 1, &i);

对于格式说明符s,缓冲区的大小也必须考虑终止零。