Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Membenamkan std::strings Terformat dengan Cekap ke dalam Strim Fail dalam C Moden?

Bagaimanakah Saya Boleh Membenamkan std::strings Terformat dengan Cekap ke dalam Strim Fail dalam C Moden?

Susan Sarandon
Lepaskan: 2024-12-18 21:02:15
asal
915 orang telah melayarinya

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

Membenamkan std::rentetan Berformat dalam Strim Fail dengan sprintf

C Moden memperkemas penyepaduan std::rentetan berformat sprintf ke dalam fail aliran. Teknik yang lebih baharu menawarkan peningkatan ketara berbanding kaedah lama.

C 20

C 20 memperkenalkan std::format, membolehkan pemformatan rentetan mudah menggunakan medan gantian seperti python:

#include <iostream>
#include <format>

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

C 11

C 11's std::snprintf menyediakan pilihan yang selamat dan mesra pengguna:

#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);
}
Salin selepas log masuk

注意事项

  • Gunakan std::snprintf untuk menentukan saiz penimbal yang diperlukan sebelum menulis ke char[].
  • Semak sebarang ralat pemformatan selepas menggunakan std::snprintf.
  • Gunakan unique_ptr untuk mengurus memori tatasusunan aksara yang diperuntukkan.

Tambahan Pilihan

  • std::snprintf dinamakan semula kepada _snprintf dalam pengkompil Microsoft.
  • Untuk fungsi yang diperluaskan dan ciri keselamatan, pertimbangkan untuk menggunakan {fmt} perpustakaan.

Kesimpulan

Teknik C Moden bertambah baik dengan ketara apabila pendekatan lama untuk menggabungkan std::string berformat ke dalam strim fail. Memilih C 20's std::format menyediakan penyelesaian yang paling diperkemas dan selamat. C 11's std::snprintf menawarkan alternatif yang kukuh untuk keserasian ke belakang, manakala perpustakaan luaran seperti {fmt} boleh meningkatkan lagi fungsi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membenamkan std::strings Terformat dengan Cekap ke dalam Strim Fail dalam C Moden?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan