Berikut ini gagal dengan kesalahan prog.cpp:5:13: error: invalid conversion from ‘char’ to ‘const char*’
int main()
{
char d = 'd';
std::string y("Hello worl");
y.append(d); // Line 5 - this fails
std::cout << y;
return 0;
}
Saya juga mencoba, berikut ini, yang mengkompilasi tetapi berperilaku secara acak saat runtime:
int main()
{
char d[1] = { 'd' };
std::string y("Hello worl");
y.append(d);
std::cout << y;
return 0;
}
Maaf untuk pertanyaan bodoh ini, tapi saya sudah mencari di sekitar google, yang bisa saya lihat hanyalah "char array to char ptr", "char ptr to char array", dll.
Jawaban:
Saya akan menggunakan
+=
operator alih-alih fungsi bernama.sumber
gcc
,basic_string::operator+=
hanya panggilan masukpush_back
.y
adalahchar*
bukanstd::string
. Itu akan menambahkand
karakter ke pointer y.Gunakan
push_back()
:sumber
Untuk menambahkan char ke std :: string var menggunakan metode append, Anda harus menggunakan overload ini:
Sunting: Anda benar Saya salah memahami parameter size_type, ditampilkan dalam bantuan konteks. Ini adalah jumlah karakter yang akan ditambahkan. Jadi, panggilan yang benar adalah
tidak
Atau cara paling sederhana:
sumber
sizeof(char)
bukan1
? Anda ingin menambahkan satu pengulangand
, jadi katakan saja. Menggunakan disizeof
sini menyesatkan karena menyarankan bahwa kita harus mengetahuiappend
ukuran byte dari tipe data yang digunakan (yang tidak terjadi).Selain yang lain disebutkan, salah satu konstruktor string mengambil char dan jumlah pengulangan untuk char itu. Jadi Anda bisa menggunakannya untuk menambahkan satu char.
sumber
Saya menguji beberapa proposisi dengan menjalankannya dalam satu lingkaran besar. Saya menggunakan microsoft visual studio 2015 sebagai kompiler dan prosesor saya adalah i7, 8Hz, 2GHz.
Menurut tes ini, hasilnya adalah:
Kesimpulan
+=
tampaknya lebih bisa dimengerti, tetapi jika Anda keberatan dengan kecepatan, gunakan appendsumber
Coba + = operator link teks , append () metode link teks , atau push_back () metode link teks
Tautan dalam pos ini juga berisi contoh cara menggunakan masing-masing API.
sumber
masalah dengan:
adalah bahwa Anda harus memiliki 'd' sebagai lawan menggunakan nama char, seperti char d = 'd'; Atau saya salah?
sumber
char c = 'd'
dan saya bisa melakukannyay.push_back(c)
tanpa masalah. Jadi tidak ada masalah denganstd::string::push_back()
(kecuali bahwa itu lebih lama dari+=
).Perhatikan bahwa dalam semua contoh ini Anda bisa menggunakan literal karakter secara langsung:
y += 'd';
.Contoh kedua Anda hampir pasti berhasil, karena alasan yang tidak terkait.
char d[1] = { 'd'};
tidak bekerja, tetapichar d[2] = { 'd'};
(catatan array adalah ukuran dua) akan telah bekerja kira-kira samaconst char* d = "d";
, dan literal string yang dapat ditambahkan:y.append(d);
.sumber
Coba gunakan d sebagai pointer y.append (* d)
sumber
char
bukan string dan tidak memiliki null-terminator. Melakukan hal ini menyebabkan perilaku yang tidak jelas.*d
berarti penunjuk de-referensid
yang merupakan kesalahan sintaks karenad
bukan penunjuk.Perhatikan saya telah menulis 10u dan bukan 10 untuk berapa kali saya ingin menambahkan karakter; ganti 10 dengan nomor berapa pun.
sumber
Saya menemukan cara sederhana ... Saya perlu menempelkan
char
tali yang sedang dibangun dengan cepat. Saya membutuhkanchar list;
karena saya memberi pengguna pilihan dan menggunakan pilihan itu dalamswitch()
pernyataan.Saya cukup menambahkan yang lain
std::string Slist;
dan mengatur string baru sama dengan karakter, "daftar" - a, b, c atau apa pun yang dipilih pengguna akhir seperti ini:Kompleksitas mungkin keren tetapi kesederhanaan lebih keren. Menurut opini saya
sumber
Juga menambahkan opsi sisipkan, seperti yang belum disebutkan.
sumber
Jika Anda menggunakan push_back tidak ada panggilan untuk konstruktor string. Kalau tidak, ia akan membuat objek string melalui casting, maka itu akan menambahkan karakter dalam string ini ke string lain. Terlalu banyak kesulitan untuk karakter kecil;)
sumber