誰かが char * と CString の違いと関係を説明できますか?... ありがとう。
7 に答える
重要な違いはほとんどありません。
char *へのポインタcharです。一般に、それが単一の文字なのか、文字列の先頭なのか、そして長さはどれくらいかはわかりません。const char *これらはすべて、プログラムロジックと、入力として使用するようないくつかの規則、つまり標準のC関数によって決定されます。文字列に割り当てられたメモリを手動で管理する必要があります。
CStringマクロです。CStringAプログラムのコンパイルオプションに応じて、またはCStringWクラスのいずれかに定義できます。相違点と類似点があります。
違いは、CStringA非Unicodeデータ(に類似char*)で動作しCStringW、Unicode文字列(に類似wchar_t*)であるということです。
ただし、両方のクラスは、文字列操作とストレージ管理の点で同等です。std::stringそれらは標準のC++とstd::wstringクラスに近いです。
それとは別に、とは両方とも、文字列をUnicode形式との間で変換する機能を提供しますCStringA。CStringW
CString はの配列にcharなり、aは文字列の文字を反復処理できる char*配列へのポインターになります。char
実際にはMSDNから:
CStringTCHARデータ型に基づいています。シンボル_UNICODEがプログラム用に定義されている場合は、16 ビット文字型の typeTCHARとして定義されます。wchar_tそれ以外の場合は、通常の 8 ビット文字型である char として定義されます。Unicode では、CStringオブジェクトは 16 ビット文字で構成されます。Unicode がなければ、8 ビットの char 型で構成されます。
CString は、char* ではなく、TCHAR のシーケンスです。主な違いは、UNICODE が定義されている場合、CString は wchar のシーケンスになることです。実際には、そのマクロに応じて、CString は CStringA または CStringW のいずれかに tpyedef されます。もう 1 つの大きな違いは、CString がクラスであるのに対し、char* は単に文字へのポインターであることです。
TCHAR のタイプに応じて、CString は CStringA または CStringW のいずれかになります。
つまりCString、文字配列のラッパーであり、その文字配列を文字列として簡単に扱い、文字列型に関連する方法で操作できるようにします。
それらの関係について、簡単に説明すると次のようになります。次のように char * と CString の間で変換できます。
CString str = "abc"; // const char[3] or char * to CString
と
const char * p = str.Get()// CString から const char へ *
CString は、いくつかの便利な追加機能を提供し、メモリの割り当て/割り当て解除をユーザーから隠すための char* のラッパー クラスです。パフォーマンスの点で大きな違いはないため、MFC クラスを使用している場合は、CString を使用することもできます。