Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Menambah Integer Terus ke std::string Membawa kepada Penegasan Nyahpepijat Gagal?

Mengapa Menambah Integer Terus ke std::string Membawa kepada Penegasan Nyahpepijat Gagal?

Barbara Streisand
Barbara Streisandasal
2024-11-10 10:19:02271semak imbas

Why Does Appending an Integer Directly to a std::string Lead to a Debug Assertion Fail?

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!

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