Bagikan melalui


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 CStringLPCTSTR. 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

  1. CString Panggil GetBuffer objek dan tentukan panjang buffer yang Anda butuhkan.

  2. Gunakan penunjuk yang dikembalikan oleh GetBuffer untuk menulis karakter langsung ke CString dalam objek.

  3. Panggil ReleaseBuffer objek untuk CString memperbarui semua informasi status internal CString , misalnya, panjang string. Setelah mengubah konten objek secara CString langsung, Anda harus memanggil ReleaseBuffer sebelum memanggil fungsi anggota lain CString .

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

String (ATL/MFC)
CString Pengoperasian Argumen