当超出范围时,自动恢复字符串
automatic string recovery when out of range
这是别人的代码!!当它得到字符串....超出范围的值时,它会自动恢复我想知道这怎么可能?没有检查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
函数获取字符,并使用try
和catch
捕获异常。
使用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);