使用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); }
注意事項
附加選項
結論
現代C 技術極大地改進了將格式化std::string 合併到檔案流中的舊方法。選擇 C 20 的 std::format 可提供最精簡且安全的解決方案。 C 11 的 std::snprintf 為向後相容性提供了可靠的替代方案,而像 {fmt} 這樣的外部函式庫可以進一步增強功能。
以上是如何在現代 C 中有效地將格式化的 std::string 嵌入到檔案流中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!