誰かが 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から:
CString
TCHAR
データ型に基づいています。シンボル_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 を使用することもできます。