Rumah > Artikel > pembangunan bahagian belakang > Mengapa Menambah Integer Terus ke std::string Membawa kepada Penegasan Nyahpepijat Gagal?
Menambahkan Integer pada std::string: Mengapa Penegasan Gagal
Dalam C , apabila cuba menambah nilai integer terus ke a std::string seperti yang dilihat di bawah:
std::string query; int ClientID = 666; query = "select logged from login where id = "; query.append((char *)ClientID);
anda mungkin menghadapi Nyahpepijat Pernyataan Gagal. Ini berlaku kerana kaedah std::string::append() memerlukan hujahnya menjadi rentetan ditamatkan NULL (char*). Walau bagaimanapun, menghantar integer sebagai penuding kepada tatasusunan aksara tanpa menamatkannya dengan aksara nol akan mengakibatkan tingkah laku tidak ditentukan dan berpotensi ranap.
Untuk menambahkan integer dengan betul pada std::string, beberapa pendekatan adalah tersedia:
1. Menggunakan std::ostringstream:
#include <sstream> std::ostringstream s; s << "select logged from login where id = " << ClientID; std::string query(s.str());
Kaedah ini mencipta objek stringstream, memasukkan teks dan nilai integer ke dalamnya dan mendapatkan semula rentetan yang terhasil.
2. Menggunakan std::to_string (C 11):
std::string query("select logged from login where id = " + std::to_string(ClientID));
Pendekatan ini menggunakan fungsi std::to_string untuk menukar integer kepada rentetan dan kemudian melakukan penggabungan.
3. Menggunakan boost::lexical_cast:
#include <boost/lexical_cast.hpp> std::string query("select logged from login where id = " + boost::lexical_cast<std::string>(ClientID));
Kaedah ini menggunakan fungsi lexical_cast perpustakaan Boost untuk menukar integer kepada rentetan dan melaksanakan penggabungan.
Atas ialah kandungan terperinci Mengapa Menambah Integer Terus ke std::string Membawa kepada Penegasan Nyahpepijat Gagal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!