Saya perlu menggunakan std::string
untuk menyimpan data yang diambil oleh fgets()
. Untuk melakukan ini, saya perlu mengubah nilai char*
kembali dari fgets()
menjadi std::string
menyimpan dalam array. Bagaimana ini bisa dilakukan?
262
str
hanyalah nama variabel. Bisa apa saja:S
,abc
,l
,I
,strHelloWorld
. Jelas beberapa pilihan lebih baik daripada yang lain. Tetapi untuk contohstr
ini cukup dapat diterima.Jika Anda sudah tahu ukuran char *, gunakan ini sebagai gantinya
Ini tidak menggunakan strlen.
EDIT: Jika variabel string sudah ada, gunakan assign ():
sumber
Sebagian besar jawaban berbicara tentang membangun
std::string
.Jika sudah dibangun, cukup gunakan operator penugasan .
sumber
Mengapa menggunakan
fgets()
saat Anda memprogram C ++? Mengapa tidakstd::getline()
?sumber
Kirimkan melalui konstruktor:
Anda dapat menggunakan fungsi string.c_str () untuk menuju ke arah lain:
sumber
c_str()
kembaliconst char*
sumber
sumber
Saya ingin menyebutkan metode baru yang menggunakan literal yang ditentukan pengguna
s
. Ini bukan hal baru, tetapi akan lebih umum karena ditambahkan di Perpustakaan Standar C ++ 14.Sangat berlebihan dalam kasus umum:
Tetapi ini memungkinkan Anda untuk menggunakan otomatis, juga dengan string lebar:
Dan di sinilah ia benar-benar bersinar:
sumber
Saya baru saja berjuang dengan MSVC2005 untuk menggunakan
std::string(char*)
konstruktor seperti jawaban berperingkat teratas. Seperti yang saya lihat varian ini terdaftar sebagai # 4 di http://en.cppreference.com/w/cpp/string/basic_string/basic_string yang selalu dipercaya , saya pikir bahkan kompiler lama menawarkan ini.Butuh waktu lama bagi saya untuk menyadari bahwa konstruktor absolut ini menolak untuk cocok
(unsigned char*)
sebagai argumen! Saya mendapat pesan kesalahan yang tidak dapat dipahami ini tentang kegagalan untuk mencocokkan denganstd::string
jenis argumen, yang jelas bukan yang saya tuju. Hanya melempar argumen denganstd::string((char*)ucharPtr)
memecahkan masalah saya ... ya!sumber
sumber
data
tetap tidak diinisialisasi (kosong).Tidak yakin mengapa tidak ada orang selain Erik yang menyebutkan ini, tetapi menurut halaman ini , operator penugasan berfungsi dengan baik. Tidak perlu menggunakan konstruktor, .assign (), atau .append ().
sumber
=
(dan+=
). Sepertinya tidak terjadi dengan literal seperti ini, tetapi hanya denganchar*
hal - hal. Masalah apakah laporan tersebut benar - benar bocor dibahas di sini . Tetapi jika saya mengubah tugas untukdestString = std::string(srcCharPtr);
kebocoran valgrind laporan hilang. YMMV.Constructs an object of class basic_string and determines its initial string value from the array
. Dikatakan nilai dan tidak ada tentang kepemilikan buffer atau pointer.