使用 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中文网其他相关文章!