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!