使用未声明的标识符'缓冲区'和未使用的变量'缓冲区'

时间:2018-05-04 00:57:02

标签: c++ compiler-errors

即时使用未声明的标识符'缓冲区' on memcpy(buffer,& m_Text [index],m_Index - index);并返回atof(缓冲区);和未使用的变量'缓冲区' char缓冲区错误[32] = {0};有没有办法解决这个问题?非常感谢

double GetNumber()
{
    SkipWhitespaces();

    int index = m_Index;
    while (isdigit(m_Text[m_Index])) m_Index++;
    if (m_Text[m_Index] == '.') m_Index++;
    while (isdigit(m_Text[m_Index])) m_Index++;

    if (m_Index - index == 0)


    char buffer[32] = { 0 };
    memcpy(buffer, &m_Text[index], m_Index - index);

    return atof(buffer);
}

1 个答案:

答案 0 :(得分:5)

让我们添加一些额外的大括号来演示正在发生的事情

double GetNumber()
{
    SkipWhitespaces();

    int index = m_Index;
    while (isdigit(m_Text[m_Index])) 
    { // added brace
        m_Index++;
    } // added close brace.
    if (m_Text[m_Index] == '.') 
    { // added brace
        m_Index++;
    } // added close brace.
    while (isdigit(m_Text[m_Index]))
    { // added brace
        m_Index++;
    } // added close brace.

    if (m_Index - index == 0)
    { // added brace
        char buffer[32] = { 0 };
    } // added close brace.
    memcpy(buffer, &m_Text[index], m_Index - index);

    return atof(buffer);
}

正如最初所写,if语句没有正文,所以它将下一行作为正文。由于char buffer[32] = { 0 };是下一行,它会成为if的一部分,并在if退出后立即超出范围,memcpy尝试时不再存在用它。

我强烈建议在学习的同时始终包括所有大括号。它有助于防止错误。如果你愿意,你可以稍后省略它们,但我总是发现它们比障碍更有帮助。

解决方案

查看源博客的原始代码,我找到了

if(m_Index - index == 0) 
    throw ParserException("Number expected but not found!", m_Index);

不是

if (m_Index - index == 0)
 

添加缺失的行(最好与省略的大括号一起添加),char buffer[32] = { 0 };将再次位于正确的范围内。