为什么将std :: smatch转换为C字符串会产生空结果?

时间:2019-04-11 01:51:25

标签: c++

我有一个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为空。

0 个答案:

没有答案