Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Cara Selamat Menukar Antara aliran rentetan, rentetan dan aksara* dalam C ?

Bagaimana Cara Selamat Menukar Antara aliran rentetan, rentetan dan aksara* dalam C ?

Susan Sarandon
Susan Sarandonasal
2024-11-14 17:31:02187semak imbas

How to Safely Convert Between stringstream, string, and char* in C  ?

Menavigasi aliran rentetan, rentetan dan char* Penukaran

Apabila bekerja dengan rentetan dalam C , pengaturcara sering menghadapi kekeliruan apabila menukar antara aliran rentetan, rentetan , dan char*. Artikel ini menyelidiki selok-belok penukaran ini, membongkar salah tanggapan dan menyediakan penyelesaian praktikal.

Memahami Sepanjang Hayat stringstream.str().c_str()

Intinya isu ini terletak pada pemahaman jangka hayat rentetan yang dikembalikan oleh stringstream.str().c_str(). Objek rentetan sementara ini dimusnahkan pada penghujung ungkapan, menjadikan sebarang penunjuk yang diperoleh daripadanya (seperti const char* cstr2) tidak sah.

Menyelesaikan Kekeliruan

Kepada selesaikan isu ini, elakkan memberikan stringstream.str().c_str() terus kepada const char*. Sebaliknya, buat salinan rentetan sementara dalam objek rentetan lain dan kemudian dapatkan rentetan C daripada itu:

const std::string tmp = stringstream.str();
const char* cstr = tmp.c_str();

Sebagai alternatif, hadkan hayat rentetan sementara dengan menggunakannya dalam ungkapan:

use_c_str( stringstream.str().c_str() );

Untuk kecekapan dan kejelasan, ikat sementara pada rujukan const:

{
  const std::string& tmp = stringstream.str();   
  const char* cstr = tmp.c_str();
}

Atas ialah kandungan terperinci Bagaimana Cara Selamat Menukar Antara aliran rentetan, rentetan dan aksara* dalam C ?. 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