C++:0xC0000005:访问违规写入位置0x00000000

C++: 0xC0000005: Access violation writing location 0x00000000

本文关键字:位置 0x00000000 0xC0000005 访问 C++      更新时间:2023-10-16

我想知道是否可以在我的程序上得到一些帮助。如标题中所述,我的程序存在访问冲突。我意识到它与取消引用垃圾指针有关,而且我很确定我已经缩小了它中断的行,我只是不确定它为什么实际上会中断,以及如何修复它。代码如下:

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;
}

对此的任何帮助将不胜感激,因为它已经困扰了我一段时间。非常感谢您的时间,如果还有其他我需要发布的内容,请告诉我。

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) - 指定...以下aAeEfFgG转换说明符适用于类型为双精度的参数;