超出范围时自动恢复字符串

时间:2013-02-27 14:50:47

标签: c++

这是别人的代码!!!当它超出字符串的范围值时它会自动恢复....我想知道这是怎么回事?没有检查str.length()!确定。

超出范围时如何自动恢复?我试图理解别人的代码,因为它在start / n = 134时的作用和str.length()也是134(0-133)。

FindEndOfToken(string &str, int start)
{
    UINT n = start;

    if( str[n] == '"' )
        doStuffOne();
    else
        doStuffTwo();
}

3 个答案:

答案 0 :(得分:3)

如何将参数与字符串长度进行比较?

if (start >= str.length())
    return;

如果您正在谈论异常,则必须捕获异常。但是,如果您使用数组索引方法,这将无效,因为它实际上不会引发正确的异常,而是导致可能导致崩溃的未定义行为。

使用上面的检查,更改以使用std::string::at函数获取角色并使用try and catch来捕获异常。

答案 1 :(得分:0)

使用std::string访问超出operator[]范围的行为是未定义的行为。事实上,在他们的代码中它不会发生崩溃,而在你的代码中它崩溃只是巧合。

答案 2 :(得分:0)

想出发生了什么......似乎是这一点点代码......在win32应用程序中它将错误发送到文件并依赖于std :: string来“恢复”/忽略lol < / p>

// Turn on memory tracking
_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF|_CRTDBG_ALLOC_MEM_DF);
_CrtSetReportMode(_CRT_ASSERT,_CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_ASSERT,_CRTDBG_FILE_STDERR);