访问冲突错误C.

时间:2013-06-13 08:31:57

标签: c

我是初学者,我正在学习C和C ++。我试图在Visual Studio 2012 Express for Windows桌面中运行此代码。这是一个简单的计算器代码,我自己写的!但每当我运行它时,我都会收到此错误Unhandled exception at 0x519600B4 (msvcr110d.dll) in Calculator.exe: 0xC0000005: Access violation writing location 0x00000000.

原谅我有任何错误(这是我第一次)。谢谢!

#include<stdio.h>
#include<conio.h>

main ()
{
    int num1, num2, result;
    char oper;
    scanf_s("%d%c%d", &num1, &oper, &num2);
    switch(oper)
    {
    case '+':
        result = num1 + num2;
        printf("%d", result);
        break;
    case '-':
        result = num1 - num2;
        printf("%d", result);
        break;
    case '*':
        result = num1 * num2;
        printf("%d", result);
        break;
    case '/':
        result = num1 / num2;
        printf("%d", result);
        break;
    default:
        printf("ERROR: INVALID OR UNRECOGNISED INPUT\n");
        break;
    }
    _getch();
}

1 个答案:

答案 0 :(得分:15)

使用scanf_s时,对于%c格式字符串,您必须指定要读取的字符数:

scanf_s("%d%c%d", &num1, &oper, 1, &num2);

documentation描述了要求:

  

与scanf和wscanf不同,scanf_s和wscanf_s要求为所有包含在[]中的c,C,s,S或字符串控件集的输入参数指定缓冲区大小。字符的缓冲区大小作为附加参数传递,紧跟在指向缓冲区或变量的指针之后。