boost:regex_match,读取wcmatch结果报错,有demo

boost::regex_match,读取wcmatch结果出错,有demo
如下小demo可以编译运行,vc6,运行到注释处就会出错,无法计算结果长度,更无法正确读取字符串内容,请高手抽空看看,运行一下,多谢!
#include "boost/tr1/regex.hpp"
using namespace boost;
 
void main()
{
boost::wregex regexp(L".*(<title>.*</title>).*");
boost::wcmatch what;
if(boost::regex_match(L"\t\r\n  <title>123这里是标题</title>  \t\r\n", what, regexp))
{
int cnt = what.size();
for(int i = 0; i < cnt; i++)
{
int len1 = what.str(i).length();
int len2 = std::wcslen(what.str(i).c_str());
const wchar_t* p = what.str(i).c_str();
int len3 = std::wcslen(p); //运行到这里会崩溃,奇怪了
}
}
}

------解决方案--------------------
引用:
如下小demo可以编译运行,vc6,运行到注释处就会出错,无法计算结果长度,更无法正确读取字符串内容,请高手抽空看看,运行一下,多谢!


C/C++ code



12345678910111213141516171819

#include "boost/tr1/regex.hpp" using namespace boost;    void main() {     b……


第一次就出错吗,还是运行了几次才出错?
可以检查一下 what.str(i).c_str()返回的内容是否有'\0'结束符.
------解决方案--------------------
引用:
回答1楼:demo是完整的哈,需要你的vc6配置好boost环境、boost::regex编译成功
回答2楼:第一次运行到int len3 = std::wcslen(p);就会崩溃,在int len2……那一行之后添加“wchar_t wc = (what.str(i).c_str())[len1];”检查结束符问题,可以看到是有结束符的

可能问题在于“const wchar_t* p ……


很明显what.str字符缓冲内容有问题.