大佬教程收集整理的这篇文章主要介绍了c – std :: regex构造函数引发异常,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这个简单的正则表达式的构造throws std :: regex_error:
bool caseInsensitive = true; char pattern[] = "\\bword\\b"; std::regex re(pattern,std::regex_constants::ECMAScript | (caseInsensitive ? std::regex_constants::icase : 0));
由异常对象返回的实际错误不一致.通常它是不匹配的parethesis或大括号.为什么?
我想用这个:
explicit basic_regex(_In_z_ const _Elem *_Ptr,flag_type _Flags = regex_constants::ECMAScript)
但是我得到了这个:
basic_regex(_In_reads_(_Count) const _Elem *_Ptr,size_t _Count,flag_type _Flags = regex_constants::ECMAScript)
标志中的三进制表达式导致类型更改为int,这在构造函数签名中不再匹配flag_type.由于它在size_t上匹配,所以调用该构造函数.标志被错误地解释为字符串的大小,导致访问字符串结尾处的内存时出现未定义的行为.
该问题不是Visual studio专用的.我能够在gcc:http://ideone.com/5DjYiz中复制它
它可以固定两种方式.首先是一个明确的论点:
std::regex re(pattern,static_cast<std::regex::flag_type>(std::regex_constants::ECMAScript | (caseInsensitive ? std::regex_constants::icase : 0)));
二是避免三元表达式中的整数常数:
std::regex re(pattern,caseInsensitive ? std::regex_constants::ECMAScript | std::regex_constants::icase : std::regex_constants::ECMAScript);
以上是大佬教程为你收集整理的c – std :: regex构造函数引发异常全部内容,希望文章能够帮你解决c – std :: regex构造函数引发异常所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。