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/