Rumah > pembangunan bahagian belakang > C++ > 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
Lepaskan: 2024-11-10 10:19:02
asal
399 orang telah melayarinya

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);
Salin selepas log masuk

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());
Salin selepas log masuk

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));
Salin selepas log masuk

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));
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan