簡體   English   中英

fmt std::string 顯示為數字

[英]fmt std::string displayed as numbers

我試圖格式化一個將顯示在控制台中的簡單字符串

    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,持續時間很長很長,ms 是雙倍。 結果如下所示: -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::stringdouble都顯示為一些隨機數。 最后一個函數正確打印了未格式化的std::string ,當我用long longdouble嘗試它時也發生了同樣的情況。

您沒有提供足夠的信息來調試此問題,但可能是您的 fmtlib 副本和 spdlog 中的副本彼此不喜歡。 spdlog 提供了一個 cmake 配置變量來防止這種情況發生,即(來自我的 cmake 文件)

set(SPDLOG_FMT_EXTERNAL ON CACHE BOOL "Use common fmtlib")

你可能想試試這個。

我找到了原因。 那是因為我在fmt之前包含了spdlog

#include "../log/Log.h"
#include "fmt/format.h"

#include "fmt/format.h"
#include "../log/Log.h"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM