首页 > 后端开发 > C++ > 如何在现代 C 中有效地将格式化的 std::string 嵌入到文件流中?

如何在现代 C 中有效地将格式化的 std::string 嵌入到文件流中?

Susan Sarandon
发布: 2024-12-18 21:02:15
原创
919 人浏览过

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::snprintf 确定所需的缓冲区大小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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板