我有一个std::smatch
,我需要将其转换为const char*
C字符串。在str().c_str()
上调用smatch
会得到一个空的结果。但是,仅调用str()
即可得到预期的结果。然后,我可以对该结果调用c_str()
以获取C字符串。
是否可能有临时物体出故障?如果是这样,我找不到它。
std::string input{ "1234" };
std::regex r{ "[\\d]*" };
std::smatch sm;
std::regex_match(input, sm, r);
auto s1 = sm[0].str(); // 1234
auto s2 = s1.c_str(); // 1234
auto s3 = sm[0].str().c_str(); // why empty?
std::cout << "s1: " << s1 << std::endl;
std::cout << "s2: " << s2 << std::endl;
std::cout << "s3: " << s3 << std::endl;
输出:
s1: 1234
s2: 1234
s3:
我需要C字符串,因为strtol()
要求使用它,我稍后会用到。
gcc似乎给出了s3
的结果,但是MSVC的s3
为空。