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);
我做错了什么?
答案 0 :(得分:1)
来自MSDN:
与scanf和wscanf不同,scanf_s和wscanf_s需要缓冲区大小 要为c,C,s,S或string类型的所有输入参数指定 包含在[]中的控件集。缓冲区大小以字符为单位 在指针指向后立即作为附加参数传递 缓冲区或变量。
以后
对于字符,可以按如下方式读取单个字符:
char c; scanf_s("%c", &c, 1);
在该参考文献的最后,还有一些例子,您可以看到:
因此,在您的特定情况下,您应该:
scanf_s("do %d %c %d", &setN, &sign, 1, &setN2);