Ralat Pengendalian dalam printf dengan std::string
Apabila cuba menggunakan printf dengan std::string, ralat mungkin berlaku disebabkan oleh jenis ketidakpadanan antara rentetan gaya C yang dijangkakan dan rentetan std::string yang disediakan.
Ini kerana printf menjangkakan rentetan gaya C yang ditamatkan nol, manakala std::string tidak memberikan perwakilan langsung sedemikian. Untuk menyelesaikan isu ini, pertimbangkan penyelesaian berikut:
Menggunakan std::cout
Memandangkan std::string menyokong lebihan beban pengendali untuk dimasukkan ke dalam strim, penyelesaian yang paling mudah ialah untuk menggunakan std::cout untuk mencetak:
std::cout << "Follow this command: " << myString;
Mengekstrak Rentetan gaya C
Jika anda secara khusus memerlukan rentetan gaya C, gunakan kaedah c_str() std::string:
printf("Follow this command: %s", myString.c_str());
Templat Variadik
Untuk alternatif selamat jenis kepada printf, pertimbangkan templat variadic, seperti yang ditunjukkan dalam contoh yang disediakan dalam jawapannya:
// Variadic function template<typename T, typename... Ts> void myPrintf(const char* format, T firstArg, Ts... otherArgs) { // Handle variable arguments // ... } // Usage myPrintf("Follow this command: %s", myString);
Pertimbangan Tambahan
Perhatikan bahawa printf tidak selamat jenis dan bergantung pada anda memberikan maklumat jenis yang tepat. Jika anda memberikan maklumat jenis yang salah, fungsi mungkin menunjukkan tingkah laku yang tidak ditentukan.
Dengan standard C 23, std::print telah muncul sebagai cara untuk menggunakan std::format untuk output langsung, menggabungkan kekuatan kedua-duanya printf dan std::cout.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan `printf` dengan `std::string` dengan betul dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!