【发布时间】:2019-11-27 17:10:56
【问题描述】:
我尝试格式化一个将显示在控制台中的简单字符串
long long duration = end - start;
double ms = static_cast<double>(duration) * 0.001;
std::string resoult = fmt::format("{} => Duration: {} micro, {} ms", m_Info.c_str(), duration, ms);
AE_TRACE(resoult);
m_Info 是 std::string,duration 是 long long,ms 是 double。
结果如下所示:
-9891888000000.0 => Duration: 49172 micro, 412316861 ms
std::string 显示为随机数,ms 应该是 49,172。
我试过了
"{:s} => Duration: {:d} micro, {:f} ms"
但这导致fmt::format_errror。我在同一个项目的其他文件中使用了同一个库,并没有出现此类错误。
编辑
我在同一部分代码中使用了其他一些 fmt 函数
long long duration = end - start;
double ms = duration * 0.001;
std::string test = "test";
fmt::memory_buffer temp;
fmt::format_to(temp, "{} {} {}", test, duration, ms);
AE_TRACE(fmt::format("{} {} {}", test, duration, ms));
AE_TRACE(temp.data());
AE_TRACE("{} {} {}"_format(test, duration, ms));
AE_TRACE(test);
在所有这些std::string 和double 中都显示为一些随机数。
最后一个函数正确打印了未格式化的std::string,当我尝试使用long long 和double 时也发生了同样的情况。
【问题讨论】:
标签: c++ formatting fmt