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

C++ C++;:0xC0000005:访问冲突写入位置0x00000000,c++,access-violation,C++,Access Violation,我想知道我是否能在我的程序上得到一些帮助。正如标题中所述,我的程序中出现访问冲突。我意识到它与取消引用垃圾指针有关,我很确定我已经缩小了它的界限,我只是不确定它为什么会真正中断,以及如何修复它。代码如下: void determineInputType(char input[kMaxUserInput]) { char* flag = NULL; if (*(flag = strchr(input, '.')) != NULL) { double gra

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

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)-指定。。。下面的
a
a
e
e
f
f
g
,或
g
转换说明符适用于指针类型为double的参数


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)-指定。。。下面的
a
a
e
e
f
f
g
,或
g
转换说明符适用于指针类型为double的参数


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)-指定。。。下面的
a
a
e
e
f
f
g
,或
g
转换说明符适用于指针类型为double的参数


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)-指定。。。下面的
a
a
e
e
f
f
g
,或
g
转换说明符适用于指针类型为double的参数


我还注意到这一行中的另一个问题:
if(*(flag=strchr(input,'.'))!=NULL)
。。。您正在取消引用指针
标志
,而指针可能为
。你应该把它改成
if((flag=strchr(input,'.'))!=NULL)
是的,我之前一直在测试它是否能解决问题,我可能应该把它去掉。我还注意到这行中的另一个问题:
if(*(flag=strchr(input,'.')!=NULL)
。。。您正在取消引用指针
标志
,而指针可能为
。你应该把它改成
if((flag=strchr(input,'.'))!=NULL)
是的,我之前一直在测试它是否能解决问题,我可能应该把它去掉。我还注意到这行中的另一个问题:
if(*(flag=strchr(input,'.')!=NULL)
。。。您正在取消引用指针
标志
,而指针可能为
。你应该把它改成
if((flag=strchr(input,'.'))!=NULL)
是的,我之前一直在测试它是否能解决问题,我可能应该把它去掉。我还注意到这行中的另一个问题:
if(*(flag=strchr(input,'.')!=NULL)
。。。您正在取消引用指针
标志
,而指针可能为
。你应该把它改成
if((flag=strchr(input,'.'))!=NULL)
是的,我之前一直在测试它是否能解决问题,我可能应该去掉它。