-2

这是别人的代码!!!并且当它获得超出范围的字符串值时它会自动恢复......我想知道这怎么可能?不检查 str.length() !好的。

超出范围时如何自动恢复?我试图理解其他人的代码,因为这就是它在 start/n=134 和 str.length() 也是 134(0-133) 时所做的事情。

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

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

3 回答 3

3

将参数与字符串长度进行比较怎么样?

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

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

要么使用上面的检查,要么改用函数std::string::at获取字符并使用trycatch捕获异常。

于 2013-02-27T14:52:41.503 回答
0

超出std::stringwith范围的访问operator[]是未定义的行为。事实上,在他们的代码中它碰巧没有崩溃,而在你的代码中它崩溃只是巧合。

于 2013-02-27T15:29:10.453 回答
0

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

// 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);
于 2013-02-27T16:16:02.060 回答