!!!VC++ Cstring [VC++][VisualStudio 2008]{{category MFC}} *http://fatalita.sakura.ne.jp/3DLib/Ref/_T/ *http://www.ruche-home.net/?%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%2F%BE%AE%A5%CD%A5%BF%BD%B8%2FUnicode%C2%D0%B1%FE%A5%B3%A1%BC%A5%C7%A5%A3%A5%F3%A5%B0 !!階層 {{ref_image mfc03_01.jpg}} !!特徴 *動的にメモリが割り当てられるため、サイズを気にしなくてよい *便利な演算子とメンバー関数 !!使用法 !リテラルから生成 CString fromLiteral = _T("String from Literal."); !代入 *オブジェクトの内容はコピーされる *同一の実体を指すことはない CString fromLiteral = _T("String from Literal."); CString copiedString = fromLiteral; !結合 CString s1 = _T("This "); s1 += _T("is a "); CString s2 = _T("test"); CString message = s1 + _T("big ") + s2; // Message contains "This is a big test". !CString -> int 変換 int i = _ttoi(str); !int -> CString 変換 CString str; int i = 999; _itot(i, str.GetBuffer(0), 10); *str.GetBuffer(0) : 文字列バッファの最小サイズ *10 : 基数 !評価 *サイズが変化する動的なオブジェクトだが、基本的な組み込み型や単純なクラスと同じように評価される *CString の各オブジェクトは一意の値を持つ *文字列へのポインタではなく実際の文字列と見なす必要がある CString fromLiteral = _T("String from Literal."); CString copiedString = fromLiteral; if (fromLiteral == copiedString ) { pDC->TextOutW(10, 70, _T("Equal.")); } else { pDC->TextOutW(10, 70, _T("Not Equal.")); } *CString オブジェクトが同じ文字列を表しているため、"等価" と見なされる *CString クラスは等価演算子 (==) をオーバーロードして、オブジェクトの値 (内容) に基づいて 2 つの CString を比較する !文字へのアクセス *GetAt、SetAtを利用してアクセスできる *GetAtの場合、[]を利用することもできる // 文字へのアクセス1 for( int i=0; iTextOutW(10 + (i * 20), 100, CString(fromLiteral.GetAt(i))); } // 文字へのアクセス2 for( int i=0; iTextOutW(10 + (i * 20), 130, CString(fromLiteral[i])); } // 文字へのアクセス3 fromLiteral.SetAt(1, _T('2')); // fromLiteral[3] = _T('4'); // SetAtの代わりには使えない pDC->TextOutW(10, 160, fromLiteral); !書式付 {{category 書式}} CString name = _T("Yagi"); int age = 36; CString profile = _T("name:%s, age:%d"); CString out = _T(""); out.Format(profile, name, age); pDC->TextOutW(10, 190, out); {{ref_image mfc03_02.jpg}}