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

Mengapa Menambahkan Integer pada Rentetan dalam C Menyebabkan Kegagalan Penegasan?

Susan Sarandon
Susan Sarandonasal
2024-11-11 11:04:03553semak imbas

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);

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());

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

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

3. Boost::lexical_cast

#include <boost/lexical_cast.hpp>

std::string query("select logged from login where id = " +
                  boost::lexical_cast<std::string>(ClientID));

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!

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