CString
Operasi yang Berkaitan dengan String Gaya C
Objek CString
berisi data string karakter. CString
mewarisi sekumpulan metode dan operator yang ditentukan dalam templat CStringT
kelas untuk bekerja dengan data string. (CString
adalah typedef
yang khusus CStringT
untuk bekerja dengan jenis data karakter yang CString
mendukung.)
CString
tidak menyimpan data karakter secara internal sebagai string null-terminated gaya C. Sebagai gantinya, CString
melacak panjang data karakter sehingga dapat lebih aman menonton data dan ruang yang diperlukan.
CString
menerima string gaya C, dan menyediakan cara untuk mengakses data karakter sebagai string gaya C. Topik ini berisi bagian berikut yang menjelaskan cara menggunakan CString
objek seolah-olah itu adalah string null-terminated gaya C.
Menggunakan CString
sebagai String Null-Terminated Gaya C
Untuk menggunakan CString
objek sebagai string gaya C, transmisikan objek ke LPCTSTR
. Dalam contoh berikut, CString
mengembalikan penunjuk ke string yang dihentikan null gaya C baca-saja. Fungsi ini strcpy
menempatkan salinan string gaya C dalam variabel myString
.
CString aCString = "A string";
char myString[256];
strcpy(myString, (LPCTSTR)aCString);
Anda dapat menggunakan CString
metode, misalnya, SetAt
, untuk memodifikasi karakter individual dalam objek string. Namun, pointer LPCTSTR
bersifat sementara dan menjadi tidak valid ketika perubahan apa pun dilakukan pada CString
. juga CString
dapat keluar dari cakupan dan dihapus secara otomatis. Kami menyarankan agar Anda mendapatkan pointer CString
baru LPCTSTR
objek setiap kali Anda menggunakannya.
Terkadang Anda mungkin memerlukan salinan CString
data untuk dimodifikasi secara langsung. Gunakan fungsi strcpy_s
yang lebih aman (atau Unicode/MBCS-portable _tcscpy_s
) untuk menyalin CString
objek ke dalam buffer terpisah. Di sinilah karakter dapat dimodifikasi dengan aman, seperti yang ditunjukkan oleh contoh berikut.
CString theString(_T("This is a test"));
int sizeOfString = (theString.GetLength() + 1);
LPTSTR lpsz = new TCHAR[sizeOfString];
_tcscpy_s(lpsz, sizeOfString, theString);
//... modify lpsz as much as you want
Catatan
Argumen ketiga ke strcpy_s
(atau Unicode/MBCS-portable _tcscpy_s
) adalah const wchar_t*
(Unicode) atau const char*
(ANSI). Contoh di atas meneruskan CString
untuk argumen ini. Pengkompilasi C++ secara otomatis menerapkan fungsi konversi yang ditentukan untuk CString
kelas yang mengonversi ke CString
LPCTSTR
. Kemampuan untuk menentukan operasi transmisi dari satu jenis ke jenis lainnya adalah salah satu fitur C++yang paling berguna.
Bekerja dengan Fungsi String Pustaka Run-Time Standar
Anda harus dapat menemukan CString
metode untuk melakukan operasi string apa pun yang mungkin Anda pertimbangkan untuk menggunakan fungsi string pustaka run-time C standar seperti strcmp
(atau Unicode/MBCS-portable _tcscmp
).
Jika Anda harus menggunakan fungsi string run-time C, Anda dapat menggunakan teknik yang dijelaskan dalam Menggunakan CString
sebagai string null-terminated gaya C. Anda dapat menyalin CString
objek ke buffer string gaya C yang setara, melakukan operasi Anda pada buffer, lalu menetapkan kembali string gaya C yang CString
dihasilkan ke objek.
Memodifikasi CString
Konten Secara Langsung
Dalam kebanyakan situasi, Anda harus menggunakan CString
fungsi anggota untuk memodifikasi konten CString
objek atau untuk mengonversi CString
ke string karakter gaya C.
Ada beberapa situasi di mana masuk akal untuk memodifikasi CString
konten secara langsung, misalnya, ketika Anda bekerja dengan fungsi sistem operasi yang memerlukan buffer karakter.
Metode GetBuffer
dan ReleaseBuffer
menawarkan akses ke buffer CString
karakter internal objek dan memungkinkan Anda memodifikasinya secara langsung. Langkah-langkah berikut menunjukkan cara menggunakan fungsi-fungsi ini untuk tujuan ini.
Untuk menggunakan GetBuffer
dan ReleaseBuffer
mengakses buffer CString
karakter internal objek
CString
PanggilGetBuffer
objek dan tentukan panjang buffer yang Anda butuhkan.Gunakan penunjuk yang dikembalikan oleh
GetBuffer
untuk menulis karakter langsung keCString
dalam objek.Panggil
ReleaseBuffer
objek untukCString
memperbarui semua informasi status internalCString
, misalnya, panjang string. Setelah mengubah konten objek secaraCString
langsung, Anda harus memanggilReleaseBuffer
sebelum memanggil fungsi anggota lainCString
.
Menggunakan CString
Objek dengan Fungsi Argumen Variabel
Beberapa fungsi C mengambil jumlah variabel argumen. Contoh penting adalah printf_s
. Karena cara fungsi semacam ini dideklarasikan, pengkompilasi tidak dapat memastikan jenis argumen dan tidak dapat menentukan operasi konversi mana yang akan dilakukan pada setiap argumen. Oleh karena itu, penting bagi Anda untuk menggunakan jenis cast eksplisit saat meneruskan CString
objek ke fungsi yang mengambil jumlah variabel argumen.
Untuk menggunakan CString
objek dalam fungsi argumen variabel, secara eksplisit mentransmisikan CString
ke LPCTSTR
string, seperti yang ditunjukkan dalam contoh berikut.
CString kindOfFruit = _T("bananas");
int howmany = 25;
_tprintf_s(_T("You have %d %s\n"), howmany, (LPCTSTR)kindOfFruit);
Menentukan CString
Parameter Formal
Untuk sebagian besar fungsi yang memerlukan argumen string, yang terbaik adalah menentukan parameter formal dalam prototipe fungsi sebagai const
penunjuk ke karakter (LPCTSTR
) alih-alih CString
. Saat parameter formal ditentukan sebagai const
penunjuk ke karakter, Anda dapat meneruskan penunjuk ke TCHAR
array, string harfiah ["hi there"
], atau CString
objek. Objek CString
akan secara otomatis dikonversi ke LPCTSTR
. Di mana pun Anda dapat menggunakan LPCTSTR
, Anda juga dapat menggunakan CString
objek.
Anda juga dapat menentukan parameter formal sebagai referensi string konstanta (yaitu, const CString&
) jika argumen tidak akan dimodifikasi. Hilangkan pengubah const
jika string akan dimodifikasi oleh fungsi. Jika nilai null default diinginkan, inisialisasi ke string null [""
], seperti yang ditunjukkan di bawah ini:
void AddCustomer(const CString& name, const CString& address,
const CString& comment = _T(""));
Untuk sebagian besar hasil fungsi, Anda cukup mengembalikan CString
objek berdasarkan nilai.
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk