Saya ingin mengonversi string
ke char
array tetapi tidak char*
. Saya tahu cara mengonversi string menjadi char*
(dengan menggunakan malloc
atau cara saya mempostingnya di kode saya) - tetapi bukan itu yang saya inginkan. Saya hanya ingin mengonversi string
ke char[size]
array. Apa itu mungkin?
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
int main()
{
// char to string
char tab[4];
tab[0] = 'c';
tab[1] = 'a';
tab[2] = 't';
tab[3] = '\0';
string tmp(tab);
cout << tmp << "\n";
// string to char* - but thats not what I want
char *c = const_cast<char*>(tmp.c_str());
cout << c << "\n";
//string to char
char tab2[1024];
// ?
return 0;
}
c++
string
type-conversion
Brian Brown
sumber
sumber
Jawaban:
Cara paling sederhana yang dapat saya pikirkan untuk melakukannya adalah:
Demi keamanan, Anda mungkin lebih suka:
atau bisa dengan cara ini:
sumber
strncpy
adalah bahwa itu tidak akan berhenti nol jika mencapai ukuran sebelum menemukan nol dalam string sumber. Harus hati-hati juga!Ok, saya kaget karena tidak ada yang benar-benar memberikan jawaban yang baik, sekarang giliran saya. Ada dua kasus;
Sebuah array konstan arang cukup baik untuk Anda sehingga Anda pergi dengan,
Atau Anda perlu memodifikasi array karakter sehingga konstanta tidak ok, maka lakukan saja ini
Keduanya hanyalah operasi penugasan dan sebagian besar waktu itulah yang Anda butuhkan, jika Anda benar-benar membutuhkan salinan baru maka ikuti jawaban orang lain.
sumber
std::size(elem)
di C ++ didefinisikan dengan baik kapanelem
adalah achar array
tetapi gagal untuk dikompilasi ketikaelem
adalahchar*
atauconst char*
, Anda dapat melihatnya di siniCara termudah untuk melakukannya adalah ini
sumber
Lebih baik menghindari C dalam C ++, jadi std :: string :: copy harus menjadi pilihan daripada strcpy .
sumber
Cukup salin string ke dalam array dengan
strcpy
.sumber
Coba cara ini seharusnya berhasil.
sumber
Coba strcpy (), tetapi seperti yang dikatakan Fred, ini C ++, bukan C
sumber
Anda bisa menggunakan
strcpy()
, seperti ini:Hati-hati dengan buffer overflow.
sumber
Jika Anda tidak mengetahui ukuran string sebelumnya, Anda dapat mengalokasikan array secara dinamis:
sumber
Saya tahu ini mungkin agak bodoh
daripadadan sederhana, tetapi saya pikir itu harus berhasil:sumber
n
tidak boleh lebih darib
. Itu akan crash jikan>b
. Lebih baik gunakanstrcpy
fungsi yang sudah disediakan. Sunting: Pada beberapa kasus mungkin lebih baik untuk digunakanstrcpy_s
karena menambahkan cek untuk NULL pointer (jika platform Anda mendukungnya)Jika Anda menggunakan C ++ 11 atau lebih tinggi, saya sarankan menggunakan
std::snprintf
overstd::strcpy
ataustd::strncpy
karena keamanannya (yaitu, Anda menentukan berapa banyak karakter yang dapat ditulis ke buffer Anda) dan karena itu null-terminates string untuk Anda (jadi Anda tidak perlu khawatir tentang itu). Ini akan menjadi seperti ini:Di C ++ 17, Anda memiliki alternatif ini:
sumber