C ++:0xC0000005:访问冲突写入位置0x00000000

时间:2015-01-15 01:33:48

标签: c++ access-violation

我想知道我是否可以获得一些关于我的计划的帮助。正如标题中所述,我的程序中存在访问冲突。我意识到它与解除引用垃圾指针有关,我很确定我已经缩小了它的突破线,我只是不确定为什么它实际上是破坏,以及如何解决它。代码如下:

void determineInputType(char input[kMaxUserInput])
{
    char* flag = NULL;
    if (*(flag = strchr(input, '.')) != NULL)
    { 
        double grade = 0;
        if ((sscanf(input, "%lf", grade)) == 1)  // problem is on this line
        {
        //rest of the code continues here

我如何获得输入:

void getUserInput(char* userInput)
{
    printf("Enter a student's grade: ");
    fgets(userInput, kMaxUserInput, stdin);
    clearCRLF(userInput);

}

最后是主要的:

int main(void)
{
    char userInput[kMaxUserInput] = { 0 };
    getUserInput(userInput);
    determineInputType(userInput);

    return 0;
}

任何对此的帮助都会非常感激,因为它一直困扰着我。非常感谢您的时间,如果还有其他需要发布的内容,请告诉我。

1 个答案:

答案 0 :(得分:3)

scanf系列要求您为要填充的值提供指针

if ((sscanf(input, "%lf", &grade)) == 1)  // problem is no longer on this line

您拥有它的方式,将grade设置为零,然后使用 作为指针。

标准的相关部分(C ++ 11所遵循的C99)是7.19.6.2 /12(我的粗体):

  

a,e,f,g - 匹配可选的带符号浮点数,无穷大或NaN,其格式与strtod函数的主题序列的预期格式相同。 相应的参数应该是浮动的指针。

     

l(ell) - 指定......以下aAeEf,{ {1}},Fg转换说明符适用于类型为指针为double的参数; ...