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

flamkuavos 2012-11-04 12:33:47
如下小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); //运行到这里会崩溃,奇怪了
}
}
}
...全文
276 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangyunzhao 2014-06-30
  • 打赏
  • 举报
回复
引用 6 楼 flamkuavos 的回复:
终于搞明白了,c_str()返回的是个临时指针,只能现用,不可以取出返回指针后再用此指针,一次都不可以,更不要说复用。 这string真是设计的不够好
晕,这个设计非常好,建议你仔细体味
liudanai2844 2012-11-04
  • 打赏
  • 举报
回复
代码要粘帖完整
flamkuavos 2012-11-04
  • 打赏
  • 举报
回复
终于搞明白了,c_str()返回的是个临时指针,只能现用,不可以取出返回指针后再用此指针,一次都不可以,更不要说复用。 这string真是设计的不够好
flamkuavos 2012-11-04
  • 打赏
  • 举报
回复
我检查了what.str(0).c_str()的内容如下,完全正常,就是L"\t\r\n <title>123这里是标题</title> \t\r\n",搞不懂哪里出问题了 0009 000d 000a 0020 0020 003c 0074 0069 0074 006c 0065 003e 0031 0032 0033 8fd9 91cc 662f 6807 9898 003c 002f 0074 0069 0074 006c 0065 003e 0020 0020 0009 000d 000a 0000
JiMoKuangXiangQu 2012-11-04
  • 打赏
  • 举报
回复
引用 3 楼 flamkuavos 的回复:
回答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字符缓冲内容有问题.
flamkuavos 2012-11-04
  • 打赏
  • 举报
回复
回答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(i).c_str();”
JiMoKuangXiangQu 2012-11-04
  • 打赏
  • 举报
回复
引用 楼主 flamkuavos 的回复:
如下小demo可以编译运行,vc6,运行到注释处就会出错,无法计算结果长度,更无法正确读取字符串内容,请高手抽空看看,运行一下,多谢! C/C++ code 12345678910111213141516171819 #include "boost/tr1/regex.hpp" using namespace boost; void main() { b……
第一次就出错吗,还是运行了几次才出错? 可以检查一下 what.str(i).c_str()返回的内容是否有'\0'结束符.

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧