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

automatic string recovery when out of range

本文关键字:恢复 字符串 范围      更新时间:2023-10-16

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

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

FindEndOfToken(string &str, int start)
{
    UINT n = start;
    if( str[n] == '"' )
        doStuffOne();
    else
        doStuffTwo();
}

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

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

如果你在谈论异常,你必须捕获异常。然而,如果你使用数组索引方法,这将不起作用,因为它实际上不会抛出一个适当的异常,相反,它会导致未定义的行为,可能会导致崩溃。

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

使用operator[]访问std::string的边界是未定义的行为。在他们的代码中它不会崩溃,而在你的代码中它会崩溃,这只是巧合。

弄清楚发生了什么....似乎是这一小段代码…在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);