首頁 >後端開發 >C++ >如何在現代 C 中有效地將格式化的 std::string 嵌入到檔案流中?

如何在現代 C 中有效地將格式化的 std::string 嵌入到檔案流中?

Susan Sarandon
Susan Sarandon原創
2024-12-18 21:02:15923瀏覽

How Can I Efficiently Embed Formatted std::strings into File Streams in Modern C  ?

使用sprintf 在文件流中嵌入格式化的std::string

現代C 簡化了sprintf 格式的std::string 到文件的整合溪流。較新的技術比傳統方法提供了顯著改進。

C 20

C 20 引入了std::format,使用類似python 的替換字段實現簡單的字符串格式化:

#include <iostream>
#include <format>

int main() {
    std::cout << std::format("Hello {}!\n", "world");
}

C 11

C 11 的std::snprintf 提供了安全且用戶友好的選項:

#include <memory>
#include <string>
#include <stdexcept>

template<typename ... Args>
std::string string_format(const std::string& format, Args ... args) {
    int size_s = std::snprintf(nullptr, 0, format.c_str(), args ...) + 1;
    if (size_s <= 0) { throw std::runtime_error("Error during formatting."); }
    size_t size = static_cast<size_t>(size_s);
    std::unique_ptr<char[]> buf(new char[size]);
    std::snprintf(buf.get(), size, format.c_str(), args ...);
    return std::string(buf.get(), buf.get() + size - 1);
}

注意事項

  • 在寫入之前使用std::snfprintf決定所需的緩衝區大小char[].
  • 使用std::snprintf後檢查是否有任何格式錯誤。
  • 使用 unique_ptr 來管理分配的字元陣列的記憶體。

附加選項

  • std::snprintf 在 Microsoft 編譯器中被重新命名為 _snprintf。
  • 要擴展功能和安全功能,請考慮使用{fmt}

結論

現代C 技術極大地改進了將格式化std::string 合併到檔案流中的舊方法。選擇 C 20 的 std::format 可提供最精簡且安全的解決方案。 C 11 的 std::snprintf 為向後相容性提供了可靠的替代方案,而像 {fmt} 這樣的外部函式庫可以進一步增強功能。

以上是如何在現代 C 中有效地將格式化的 std::string 嵌入到檔案流中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn