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

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

附言下面的代码获得相同的结果。

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


我究竟做错了什么?

最佳答案

MSDN


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


然后


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

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



在该参考资料的最后,您还可以看到一些示例:


count参数应该在相应的输入之后立即出现
count参数应对应于预期的最大字符数(或如上针对单个字符所述,应为1)


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

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

关于c++ - scanf_s错误的Visual Studio,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23145101/

10-12 17:18