CString、string、char*のまとめ


(一)まずstringとchar*についてお話しします.
1、概要
C言語:
string    , char*     。            ,                  (  ‘\0’         ) ,            ,         。

C++では、stringは文字コンテナであり、テンプレートライブラリの拡張テンプレートクラスであり、charは基本データ型(C++の内蔵タイプ)であり、両者はさらに等価ではありません.ここでstringにはコンストラクション関数があり、charにはコンストラクション関数がなく、付与のみ可能(char*m=「abc」;string str(m);
2、両者の相互転化:
string char*:
  c_str()  。`std::string str="abc"; char* p=str.c_str();`

char*回転string:
       string s(char *),         ,    assign();

(二)CString
1、概要
CStringは有用なデータ型です.これらはMFCの多くの操作を大幅に簡略化し、MFCが文字列操作を行う際に便利になった.CStringタイプの利便性の特徴を体現できる1つの側面は文字列の接続であり、CStringタイプを使用すると、次の例のように2つの文字列を簡単に接続することができます.
CString gray("Gray");
CString cat("Cat");
CString graycat = gray + cat;
//then graycat="GrayCat"

次の方法よりずっといいです.
char gray[] = "Gray";
char cat[] = "Cat";
char * graycat = malloc(strlen(gray) + strlen(cat) + 1);
strcpy(graycat,gray);
strcat(graycat,cat);

2、CStringとその他の両者の間の転化
CString->std::string例:
CString strMfc=“test“; 
std::string strStl; 
strStl=strMfc.GetBuffer(0); 

unicodeの場合:
CStringW strw = _T("test");
CStringA stra(strw.GetBuffer(0));
strw.ReleaseBuffer();

std::string imgpath=stra.GetBuffer(0);
stra.ReleaseBuffer();

std::string->CString例:
CString strMfc; 
std::string strStl=“test“; 
strMfc=strStl.c_str(); 

CString->char*の例:
強制タイプ変換LPCTSTR
LPCTSTR s;

または
LPCTSTR(s);

Getbuffer()の使用:
GetBufferにパラメータを渡さない場合は、デフォルト値0を使用します.「この文字列のポインタをください.長くしないことを保証します」という意味です.ReleaseBufferを呼び出すと、文字列の実際の長さが再計算され、CStringオブジェクトに格納されます.GetBufferとReleaseBufferの間のこの範囲では、このバッファのCStringオブジェクトを操作することはできません.ReleaseBufferが呼び出されるまで、CStringオブジェクトの整合性は保証されません.
LPTSTR p = s.GetBuffer();
// do something with p
int m = s.GetLength(); //     !!!
s.ReleaseBuffer();
int n = s.GetLength(); //