我正在尝试编写一个简单的代码来输入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
答案 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
,缓冲区的大小也必须考虑终止零。