C++;regex Visual Studio社区2015<;regex>;给出了意想不到的结果 使用Visual Studio社区2015 C++ 使用的意外结果

C++;regex Visual Studio社区2015<;regex>;给出了意想不到的结果 使用Visual Studio社区2015 C++ 使用的意外结果,c++,regex,C++,Regex,源代码: #include <regex> int main() { std::regex re("^(.)=(\\d{1,2})/(\\d{1,2})*$"); std::cmatch cm; std::regex_match("f=12/64", cm, re); for (unsigned idxMatch = 0; idxMatch < cm.size(); idxMatch++) { printf("Found

源代码:

#include <regex>
int main()
{
    std::regex re("^(.)=(\\d{1,2})/(\\d{1,2})*$");
    std::cmatch cm;
    std::regex_match("f=12/64", cm, re);
    for (unsigned idxMatch = 0; idxMatch < cm.size(); idxMatch++)
    {
        printf("Found Match %d '%s'\n", idxMatch, cm[idxMatch]);
    }
    return 0;
}
#包括
int main()
{
std::regex re(“^(.)=(\\d{1,2})/(\\d{1,2})*$”;
std::cmatch-cm;
标准::正则表达式匹配(“f=12/64”,厘米,重);
for(无符号idxMatch=0;idxMatch
结果:

找到匹配的0'f=12/64' 找到匹配项1'f=12/64' 找到匹配项2'12/64' 找到匹配的3'4'

预期成果:

找到匹配的0'f=12/64' 找到匹配项1'f' 找到匹配项2'12' 找到匹配项3'64'

评注:

regex在多个其他regex系统上正常工作 包括C、Perl、Java和Javascript

正则表达式可以在我使用的每个多联机测试仪上正常工作 尝试

我尝试过用出乎意料的相同结果转义“/”


我在Microsoft网站上没有找到可能不正确的正则表达式的线索。

问题是您使用的
printf
格式说明符错误。
cm[idxMatch]
不是以null结尾的字符串,因此
%s
说明符将不起作用。如果提供了与输出说明符匹配的错误数据类型,则行为未定义

最简单的解决方案是使用
std::cout
,以及一般的类型安全输出流

为了圆满解决问题,下面是使用
printf
的示例。注意输出的奇怪之处:


编辑:对于g++,使用
printf
时出现运行时错误

使用
std::cout
时,我们得到了所需的输出:


停止使用printf。使用
cout
。使用
cout
无法复制问题,而使用
printf
这些格式说明符不正确。刚刚在VS 2015 Professional中测试过,如果我使用
cout
,它可以正常工作,我会显示4组,
f=12/6
f
12
64
。谢谢-我将说明符更改为cm[idxMatch].str().c_str()和我期望的结果。遗憾的是,cout不是一个选项。再次感谢