Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencetak std::strings dengan betul dengan printf?

Bagaimana untuk Mencetak std::strings dengan betul dengan printf?

Barbara Streisand
Barbara Streisandasal
2024-12-26 11:11:11891semak imbas

How to Correctly Print std::strings with printf?

Cara menggunakan printf dengan std::string

Apabila cuba menggunakan printf dengan std::string, anda mungkin menghadapi tingkah laku yang tidak dijangka seperti rentetan yang kelihatan rawak sedang dicetak dan bukannya std::string yang dimaksudkan value.

Ini berlaku kerana printf ialah fungsi C yang beroperasi pada rentetan gaya C, manakala std::string ialah objek C yang menguruskan memori yang diperuntukkan secara dinamik. Untuk membetulkan ini, terdapat beberapa pendekatan:

Menggunakan std::cout:

Penyelesaian yang paling mudah ialah menggunakan std::cout, yang menyokong lebihan beban operator untuk std::string, membolehkan anda mencetaknya terus:

std::cout << "Follow this command: " << myString;

Menggunakan c_str():

Jika anda perlu mengekstrak rentetan gaya C yang ditamatkan nol daripada std::string, anda boleh menggunakan kaedah c_str():

printf("Follow this command: %s", myString.c_str());

Menggunakan std::format:

Untuk C moden (C 20 dan lebih baru), anda boleh mengambil kesempatan of std::format, yang menyediakan cara selamat jenis dan serba boleh untuk memformat rentetan:

std::cout << "Follow this command: " << std::format("{}", myString);

Menggunakan Templat Variadik:

Jika anda memerlukan lebih kawalan ke atas format output, anda boleh pertimbangkan untuk menggunakan templat variadic. Walau bagaimanapun, tiada fungsi terbina dalam pustaka standard yang serupa dengan printf yang menggunakan templat variadik.

Menggunakan Boost.Format:

Boost menyediakan perpustakaan pengepala sahaja dipanggil Boost.Format, yang menawarkan cara alternatif untuk melaksanakan pemformatan seperti printf menggunakan templat variadic.

Atas ialah kandungan terperinci Bagaimana untuk Mencetak std::strings dengan betul dengan printf?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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