scanf_s错误视觉工作室

时间:2014-04-17 23:24:48

标签: c++ scanf

int setN, setN2; char sign; scanf_s("do %d %c %d", &setN, &sign, &setN2);

例如,我输入“do 1 + 3”,并且vs中的程序出现错误“disc_II_2_1.exe中的0x650de541处的未处理异常:0xC0000005:访问冲突写入位置0xc96ff41e”。

P.S。下面的代码得到相同的结果。

scanf_s("do %d %c %d", &setN, &sign, &setN2, 8);

我做错了什么?

1 个答案:

答案 0 :(得分:1)

来自MSDN

  

与scanf和wscanf不同,scanf_s和wscanf_s需要缓冲区大小   要为c,C,s,S或string类型的所有输入参数指定   包含在[]中的控件集。缓冲区大小以字符为单位   在指针指向后立即作为附加参数传递   缓冲区或变量。

以后

  

对于字符,可以按如下方式读取单个字符:

char c;
scanf_s("%c", &c, 1);

在该参考文献的最后,还有一些例子,您可以看到:

  • count参数应该在相应的输入后立即显示
  • count参数应该对应于预期char的最大数量(或者如上所述,对于单个char,它应该是1)

因此,在您的特定情况下,您应该:

scanf_s("do %d %c %d", &setN, &sign, 1, &setN2);
相关问题