Saya perlu menggabungkan dua karakter const seperti ini:
const char *one = "Hello ";
const char *two = "World";
Bagaimana saya bisa melakukan itu?
Saya melewati ini char*
dari perpustakaan pihak ketiga dengan antarmuka C jadi saya tidak bisa begitu saja menggunakannya std::string
.
c++
c
string-concatenation
Anthoni Caldwell
sumber
sumber
strcpy
danstrcat
panggilan, saya pikir masuk akal untuk mengubah tag.Jawaban:
Dalam contoh Anda, satu dan dua adalah pointer char, menunjuk ke konstanta char. Anda tidak dapat mengubah konstanta karakter yang ditunjukkan oleh petunjuk ini. Jadi apapun seperti:
tidak akan berfungsi. Sebagai gantinya Anda harus memiliki variabel terpisah (char array) untuk menampung hasilnya. Sesuatu seperti ini:
sumber
strcpy(one,two);
seharusnyastrcat(one,two);
(bukan itu yang membuatnya benar, seperti yang Anda tunjukkan dengan benar).sprintf(dest,"%s%s",one,two)
dan melupakan salinannya?Cara C:
Cara C ++:
Cara waktu kompilasi:
sumber
Jika Anda menggunakan C ++, mengapa Anda tidak menggunakan
std::string
string gaya C?Jika Anda perlu meneruskan string ini ke fungsi-C, cukup teruskan
three.c_str()
sumber
Menggunakan
std::string
:sumber
Diperbarui: diubah
string total = string(one) + string(two);
menjadistring total( string(one) + two );
karena alasan kinerja (menghindari konstruksi string dua dan total string sementara)sumber
Satu contoh lagi:
Tetapi kecuali Anda secara khusus tidak ingin atau tidak dapat menggunakan pustaka standar C ++, penggunaan
std::string
mungkin lebih aman.sumber
new
. Dan jika dia bisa menggunakannya, dia harus menggunakanstd::string
, seperti yang Anda katakan.Sepertinya Anda menggunakan C ++ dengan pustaka C dan oleh karena itu Anda perlu bekerja dengannya
const char *
.Saya sarankan untuk membungkusnya
const char *
menjadistd::string
:sumber
Pertama-tama, Anda harus membuat beberapa ruang memori dinamis. Kemudian Anda bisa memasukkan dua string ke dalamnya. Atau Anda dapat menggunakan kelas "string" c ++. Cara C sekolah lama:
Cara C ++ baru
sumber
Jika Anda tidak mengetahui ukuran senar, Anda dapat melakukan sesuatu seperti ini:
sumber
Anda bisa menggunakan
strstream
. Secara resmi sudah usang, tapi masih merupakan alat yang hebat jika Anda perlu bekerja dengan string C, saya kira.Ini akan menulis
one
dan kemudiantwo
ke aliran, dan menambahkan terminating\0
menggunakanstd::ends
. Dalam kasus kedua string bisa berakhir menulis99
karakter persis - jadi tidak ada spasi yang tersisa untuk menulis\0
- kita menulis satu secara manual di posisi terakhir.sumber
streambuf
output pengarahan Anda sendiri ke buffer char yang digunakanostream
juga tidak terlalu sulit.sumber
Menghubungkan dua pointer char konstan tanpa menggunakan perintah strcpy dalam alokasi memori dinamis:
sumber