Rumah > pembangunan bahagian belakang > C++ > Mengapa Menambahkan Integer pada Rentetan dalam C Menyebabkan Kegagalan Penegasan?

Mengapa Menambahkan Integer pada Rentetan dalam C Menyebabkan Kegagalan Penegasan?

Susan Sarandon
Lepaskan: 2024-11-11 11:04:03
asal
630 orang telah melayarinya

Why Does Appending an Integer to a String in C   Cause an Assertion Failure?

Menambahkan Integer pada Rentetan dalam C : Menyelesaikan Masalah Kegagalan Penegasan

Pertimbangkan kod berikut yang cuba menambahkan integer pada rentetan:

std::string query;
int ClientID = 666;
query = "select logged from login where id = ";
query.append((char *)ClientID);
Salin selepas log masuk

Walau bagaimanapun, kod ini mencetuskan Kegagalan Penegasan Nyahpepijat. Untuk memahami sebabnya, kita perlu menyemak kelakuan yang dijangkakan std::string::append().

std::string::append() mengambil argumen char*, yang sepatutnya ditamatkan NULL Rentetan gaya C. Walau bagaimanapun, dalam kes kami, kami menghantar penunjuk mentah kepada ClientID integer, yang bukan rentetan yang ditamatkan NULL.

Pendekatan Penyelesaian

Untuk menambah integer kepada rentetan dalam C , anda mempunyai beberapa pilihan:

1. std::ostringstream

#include <sstream>

std::ostringstream s;
s << "select logged from login where id = " << ClientID;
std::string query(s.str());
Salin selepas log masuk

2. std::to_string (C 11 dan kemudian)

std::string query("select logged from login where id = " +
                  std::to_string(ClientID));
Salin selepas log masuk

3. 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

Setiap pendekatan ini akan menukar ClientID integer dengan betul kepada rentetan dan menambahkannya pada rentetan asas, menghasilkan rentetan yang sah tanpa mencetuskan kegagalan penegasan.

Atas ialah kandungan terperinci Mengapa Menambahkan Integer pada Rentetan dalam C Menyebabkan Kegagalan Penegasan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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