锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美视频在线观看一区,久久精品国产999大香线蕉,欧美日韩免费一区http://m.shnenglu.com/brucejini/category/12062.htmlzh-cnThu, 24 Dec 2009 14:07:09 GMTThu, 24 Dec 2009 14:07:09 GMT60VC甯哥敤鏁版嵁綾誨瀷浣跨敤杞崲璇﹁В(杞澆) http://m.shnenglu.com/brucejini/articles/103947.html璺漢鐢?/dc:creator>璺漢鐢?/author>Thu, 24 Dec 2009 07:52:00 GMThttp://m.shnenglu.com/brucejini/articles/103947.htmlhttp://m.shnenglu.com/brucejini/comments/103947.htmlhttp://m.shnenglu.com/brucejini/articles/103947.html#Feedback0http://m.shnenglu.com/brucejini/comments/commentRss/103947.htmlhttp://m.shnenglu.com/brucejini/services/trackbacks/103947.htmlCString ,BSTR ,LPCTSTR涔嬮棿鍏崇郴鍜屽尯鍒?/font>

CString鏄竴涓姩鎬乀CHAR鏁扮粍錛孊STR鏄竴縐嶄笓鏈夋牸寮忕殑瀛楃涓詫紙闇瑕佺敤緋葷粺鎻愪緵鐨勫嚱鏁版潵鎿嶇旱錛孡PCTSTR鍙槸涓涓父閲忕殑TCHAR鎸囬拡銆?br>
CString 鏄竴涓畬鍏ㄧ嫭绔嬬殑綾伙紝鍔ㄦ佺殑TCHAR鏁扮粍錛屽皝瑁呬簡 + 絳夋搷浣滅鍜屽瓧絎︿覆鎿嶄綔鏂規硶銆?br>typedef OLECHAR FAR* BSTR;
typedef const char * LPCTSTR;

vc++涓悇縐嶅瓧絎︿覆鐨勮〃紺烘硶

棣栧厛char* 鏄寚鍚慉NSI瀛楃鏁扮粍鐨勬寚閽堬紝鍏朵腑姣忎釜瀛楃鍗犳嵁8浣嶏紙鏈夋晥鏁版嵁鏄櫎鎺夋渶楂樹綅鐨勫叾浠?浣嶏級錛岃繖閲屼繚鎸佷簡涓庝紶緇熺殑C,C++鐨勫吋瀹廣?/p>

LP鐨勫惈涔夋槸闀挎寚閽?long pointer)銆侺PSTR鏄竴涓寚鍚戜互‘\0’緇撳熬鐨凙NSI瀛楃鏁扮粍鐨勬寚閽堬紝涓巆har*鍙互浜掓崲浣跨敤錛屽湪win32涓緝澶氬湴浣跨敤LPSTR銆?br>鑰孡PCSTR涓鍔犵殑‘C’鐨勫惈涔夋槸“CONSTANT”錛堝父閲忥級錛岃〃鏄庤繖縐嶆暟鎹被鍨嬬殑瀹炰緥涓嶈兘琚嬌鐢ㄥ畠鐨凙PI鍑芥暟鏀瑰彉錛岄櫎姝や箣澶栵紝瀹冧笌LPSTR鏄瓑鍚岀殑銆?br>1.LP琛ㄧず闀挎寚閽?鍦╳in16涓嬫湁闀挎寚閽?LP)鍜岀煭鎸囬拡(P)鐨勫尯鍒?鑰屽湪win32涓嬫槸娌℃湁鍖哄埆鐨?閮芥槸32浣?鎵浠ヨ繖閲岀殑LP鍜孭鏄瓑浠風殑.
2.C琛ㄧずconst
3.T鏄粈涔堜笢瑗垮憿,鎴戜滑鐭ラ亾TCHAR鍦ㄩ噰鐢║nicode鏂瑰紡緙栬瘧鏃舵槸wchar_t,鍦ㄦ櫘閫氭椂緙栬瘧鎴恈har.

涓轟簡婊¤凍紼嬪簭浠g爜鍥介檯鍖栫殑闇瑕侊紝涓氱晫鎺ㄥ嚭浜哢nicode鏍囧噯錛屽畠鎻愪緵浜嗕竴縐嶇畝鍗曞拰涓鑷寸殑琛ㄨ揪瀛楃涓茬殑鏂規硶錛屾墍鏈夊瓧絎︿腑鐨勫瓧鑺傞兘鏄?6浣嶇殑鍊鹼紝鍏舵暟閲忎篃鍙互婊¤凍宸笉澶氫笘鐣屼笂鎵鏈変功闈㈣璦瀛楃鐨勭紪鐮侀渶姹傦紝寮鍙戠▼搴忔椂浣跨敤Unicode錛堢被鍨嬩負wchar_t)鏄竴縐嶈榧撳姳鐨勫仛娉曘?/p>

LPWSTR涓嶭PCWSTR鐢辨浜х敓錛屽畠浠殑鍚箟綾諱技浜嶭PSTR涓嶭PCSTR錛屽彧鏄瓧絎︽暟鎹槸16浣嶇殑wchar_t鑰屼笉鏄痗har銆?/p>

鐒跺悗涓轟簡瀹炵幇涓ょ緙栫爜鐨勯氱敤錛屾彁鍑轟簡TCHAR鐨勫畾涔夛細
濡傛灉瀹氫箟_UNICODE錛屽0鏄庡涓嬶細
typedef wchar_t TCHAR;
濡傛灉娌℃湁瀹氫箟_UNICODE錛屽垯澹版槑濡備笅錛?br>typedef char TCHAR;

LPTSTR鍜孡PCTSTR涓殑鍚箟灝辨槸姣忎釜瀛楃鏄繖鏍風殑TCHAR銆?/p>

CString綾諱腑鐨勫瓧絎﹀氨鏄澹版槑涓篢CHAR綾誨瀷鐨勶紝瀹冩彁渚涗簡涓涓皝瑁呭ソ鐨勭被渚涚敤鎴鋒柟渚垮湴浣跨敤銆?/p>

LPCTSTR:
     #ifdef _UNICODE
        typedef const wchar_t * LPCTSTR;
     #else
        typedef const char * LPCTSTR;
     #endif

VC甯哥敤鏁版嵁綾誨瀷浣跨敤杞崲璇﹁В
 
鍏堝畾涔変竴浜涘父瑙佺被鍨嬪彉閲忓熶互璇存槑
int i = 100;
long l = 2001;
float f=300.2;
double d=12345.119;
char username[]="濂充緺紼嬩僵鍚?;
char temp[200];
char *buf;
CString str;
_variant_t v1;
_bstr_t v2;

涓銆佸叾瀹冩暟鎹被鍨嬭漿鎹負瀛楃涓?/font>

鐭暣鍨?int)
       itoa(i,temp,10);     //灝唅杞崲涓哄瓧絎︿覆鏀懼叆temp涓?鏈鍚庝竴涓暟瀛楄〃紺哄崄榪涘埗
       itoa(i,temp,2);      //鎸変簩榪涘埗鏂瑰紡杞崲
闀挎暣鍨?long)
       ltoa(l,temp,10);


浜屻佷粠鍏跺畠鍖呭惈瀛楃涓茬殑鍙橀噺涓幏鍙栨寚鍚戣瀛楃涓茬殑鎸囬拡

CString鍙橀噺
str = "2008鍖椾含濂ヨ繍";
buf = (LPSTR)(LPCTSTR)str;
BSTR綾誨瀷鐨刜variant_t鍙橀噺
v1 = (_bstr_t)"紼嬪簭鍛?;
buf = _com_util::ConvertBSTRToString((_bstr_t)v1);

涓夈佸瓧絎︿覆杞崲涓哄叾瀹冩暟鎹被鍨?br>strcpy(temp,"123");

鐭暣鍨?int)
      i = atoi(temp);
闀挎暣鍨?long)
      l = atol(temp);
嫻偣(double)
      d = atof(temp);

鍥涖佸叾瀹冩暟鎹被鍨嬭漿鎹㈠埌CString

浣跨敤CString鐨勬垚鍛樺嚱鏁癋ormat鏉ヨ漿鎹?渚嬪:

鏁存暟(int)
      str.Format("%d",i);
嫻偣鏁?float)
      str.Format("%f",i);
瀛楃涓叉寚閽?char *)絳夊凡緇忚CString鏋勯犲嚱鏁版敮鎸佺殑鏁版嵁綾誨瀷鍙互鐩存帴璧嬪?br>      str = username;

浜斻丅STR銆乢bstr_t涓嶤ComBSTR

CComBSTR銆乢bstr_t鏄BSTR鐨勫皝瑁?BSTR鏄寚鍚戝瓧絎︿覆鐨?2浣嶆寚閽堛?br>char *杞崲鍒癇STR鍙互榪欐牱: BSTR b=_com_util::ConvertStringToBSTR("鏁版嵁");     //浣跨敤鍓嶉渶瑕佸姞涓婂ご鏂囦歡comutil.h
鍙嶄箣鍙互浣跨敤char *p=_com_util::ConvertBSTRToString(b);


鍏乂ARIANT 銆乢variant_t 涓?COleVariant

VARIANT鐨勭粨鏋勫彲浠ュ弬鑰冨ご鏂囦歡VC98\Include\OAIDL.H涓叧浜庣粨鏋勪綋tagVARIANT鐨勫畾涔夈?br>瀵逛簬VARIANT鍙橀噺鐨勮祴鍊鹼細棣栧厛緇檝t鎴愬憳璧嬪鹼紝鎸囨槑鏁版嵁綾誨瀷錛屽啀瀵硅仈鍚堢粨鏋勪腑鐩稿悓鏁版嵁綾誨瀷鐨勫彉閲忚祴鍊鹼紝涓句釜渚嬪瓙錛?br>VARIANT va;
int a=2001;
va.vt=VT_I4;    //鎸囨槑鏁村瀷鏁版嵁
va.lVal=a;      //璧嬪?/p>

瀵逛簬涓嶉┈涓婅祴鍊肩殑VARIANT錛屾渶濂藉厛鐢╒oid VariantInit(VARIANTARG FAR* pvarg);榪涜鍒濆鍖?鍏舵湰璐ㄦ槸灝唙t璁劇疆涓篤T_EMPTY,涓嬭〃鎴戜滑鍒椾婦vt涓庡父鐢ㄦ暟鎹殑瀵瑰簲鍏崇郴:

unsigned char bVal; VT_UI1
short iVal; VT_I2
long lVal;  VT_I4 
float fltVal;  VT_R4
double dblVal;  VT_R8 
VARIANT_BOOL boolVal;  VT_BOOL
SCODE scode;  VT_ERROR
CY cyVal;  VT_CY
DATE date;  VT_DATE
BSTR bstrVal;  VT_BSTR
IUnknown FAR* punkVal;  VT_UNKNOWN
IDispatch FAR* pdispVal;  VT_DISPATCH
SAFEARRAY FAR* parray;  VT_ARRAY|*
unsigned char FAR* pbVal;  VT_BYREF|VT_UI1
short FAR* piVal;  VT_BYREF|VT_I2
long FAR* plVal;  VT_BYREF|VT_I4
float FAR* pfltVal;  VT_BYREF|VT_R4
double FAR* pdblVal; VT_BYREF|VT_R8
VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL
SCODE FAR* pscode;  VT_BYREF|VT_ERROR
CY FAR* pcyVal;  VT_BYREF|VT_CY
DATE FAR* pdate; VT_BYREF|VT_DATE
BSTR FAR* pbstrVal;  VT_BYREF|VT_BSTR
IUnknown FAR* FAR* ppunkVal;  VT_BYREF|VT_UNKNOWN
IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH
SAFEARRAY FAR* FAR* pparray;  VT_ARRAY|*
VARIANT FAR* pvarVal;  VT_BYREF|VT_VARIANT
void FAR* byref;  VT_BYREF

_variant_t鏄疺ARIANT鐨勫皝瑁呯被錛屽叾璧嬪煎彲浠ヤ嬌鐢ㄥ己鍒剁被鍨嬭漿鎹紝鍏舵瀯閫犲嚱鏁頒細鑷姩澶勭悊榪欎簺鏁版嵁綾誨瀷銆?br>渚嬪錛?br>long l=222;
ing i=100;
_variant_t lVal(l);
lVal = (long)i;

COleVariant鐨勪嬌鐢ㄤ笌_variant_t鐨勬柟娉曞熀鏈竴鏍鳳紝璇峰弬鑰冨涓嬩緥瀛愶細
COleVariant v3 = "瀛楃涓?, v4 = (long)1999;
CString str =(BSTR)v3.pbstrVal;
long i = v4.lVal;

涓冦佸叾瀹?/font>

瀵規秷鎭殑澶勭悊涓垜浠粡甯擱渶瑕佸皢WPARAM鎴朙PARAM絳?2浣嶆暟鎹?DWORD)鍒嗚В鎴愪袱涓?6浣嶆暟鎹?WORD),渚嬪錛?br>LPARAM lParam;
WORD loValue = LOWORD(lParam);     //鍙栦綆16浣?br>WORD hiValue = HIWORD(lParam);     //鍙栭珮16浣?
瀵逛簬16浣嶇殑鏁版嵁(WORD)鎴戜滑鍙互鐢ㄥ悓鏍風殑鏂規硶鍒嗚В鎴愰珮浣庝袱涓?浣嶆暟鎹?BYTE),渚嬪:
WORD wValue;
BYTE loValue = LOBYTE(wValue);     //鍙栦綆8浣?br>BYTE hiValue = HIBYTE(wValue);     //鍙栭珮8浣?nbsp;

濡備綍灝咰String綾誨瀷鐨勫彉閲忚祴緇檆har*綾誨瀷鐨勫彉閲?br>1銆丟etBuffer鍑芥暟錛?br>浣跨敤CString::GetBuffer鍑芥暟銆?br>char *p;
CString str="hello";
p=str.GetBuffer(str.GetLength());
str.ReleaseBuffer();

灝咰String杞崲鎴恈har * 鏃?br>CString str("aaaaaaa");
strcpy(str.GetBuffer(10),"aa");
str.ReleaseBuffer();
褰撴垜浠渶瑕佸瓧絎︽暟緇勬椂璋冪敤GetBuffer(int n),鍏朵腑n涓烘垜浠渶瑕佺殑瀛楃鏁扮粍鐨勯暱搴?浣跨敤瀹屾垚鍚庝竴瀹氳椹笂璋冪敤ReleaseBuffer();
榪樻湁寰堥噸瑕佺殑涓鐐瑰氨鏄?鍦ㄨ兘浣跨敤const char *鐨勫湴鏂?灝變笉瑕佷嬌鐢╟har *

2銆乵emcpy錛?
CString mCS=_T("cxl");
char mch[20];
memcpy(mch,mCS,20);

3銆佺敤LPCTSTR寮哄埗杞崲錛?灝介噺涓嶄嬌鐢?br>char *ch;
CString str;
ch=(LPSTR)(LPCTSTR)str;

CString str = "good";
char *tmp;
sprintf(tmp,"%s",(LPTSTR)(LPCTSTR)str);

4銆?br>CString Msg;
Msg=Msg+"abc";
LPTSTR lpsz;
lpsz = new TCHAR[Msg.GetLength()+1];
_tcscpy(lpsz, Msg);
char * psz;
strcpy(psz,lpsz);


CString綾誨悜const char *杞崲
char a[100];
CString str("aaaaaa");
strncpy(a,(LPCTSTR)str,sizeof(a));
鎴栬呭涓?
strncpy(a,str,sizeof(a));
浠ヤ笂涓ょ鐢ㄦ硶閮芥槸姝g‘鍦? 鍥犱負strncpy鐨勭浜屼釜鍙傛暟綾誨瀷涓篶onst char *.鎵浠ョ紪璇戝櫒浼氳嚜鍔ㄥ皢CString綾昏漿鎹㈡垚const char *.

CString杞琇PCTSTR (const char *)
CString cStr;
const char *lpctStr=(LPCTSTR)cStr;

LPCTSTR杞珻String
LPCTSTR lpctStr;
CString cStr=lpctStr;

灝哻har*綾誨瀷鐨勫彉閲忚祴緇機String鍨嬬殑鍙橀噺
鍙互鐩存帴璧嬪鹼紝濡傦細
CString myString = "This is a test";
涔熷彲浠ュ埄鐢ㄦ瀯閫犲嚱鏁幫紝濡傦細
CString s1("Tom");

灝咰String綾誨瀷鐨勫彉閲忚祴緇檆har []綾誨瀷(瀛楃涓?鐨勫彉閲?br>1銆乻printf()鍑芥暟
CString str = "good";
char tmp[200] ;
sprintf(tmp, "%s",(LPCSTR)str);  
(LPCSTR)str榪欑寮哄埗杞崲鐩稿綋浜?LPTSTR)(LPCTSTR)str
CString綾葷殑鍙橀噺闇瑕佽漿鎹負(char*)鐨勬椂,浣跨敤(LPTSTR)(LPCTSTR)str

鐒惰岋紝LPCTSTR鏄痗onst char *,涔熷氨鏄錛屽緱鍒扮殑瀛楃涓叉槸涓嶅彲鍐欑殑錛佸皢鍏跺己鍒惰漿鎹㈡垚LPTSTR鍘繪帀const錛屾槸鏋佷負鍗遍櫓鐨勶紒
涓涓嶇暀紲炲氨浼氬畬铔嬶紒瑕佸緱鍒癱har *,搴旇鐢℅etBuffer()鎴朑etBufferSetLength()錛岀敤瀹屽悗鍐嶈皟鐢≧eleaseBuffer()銆?/p>

2銆乻trcpy()鍑芥暟
CString str;
char c[256];
strcpy(c, str);

char mychar[1024];
CString source="Hello";
strcpy((char*)&mychar,(LPCTSTR)source);


鍏充簬CString鐨勪嬌鐢?br>1銆佹寚瀹?CString 褰㈠弬
    瀵逛簬澶у鏁伴渶瑕佸瓧絎︿覆鍙傛暟鐨勫嚱鏁幫紝鏈濂藉皢鍑芥暟鍘熷瀷涓殑褰㈠弬鎸囧畾涓轟竴涓寚鍚戝瓧絎?(LPCTSTR) 鑰岄潪 CString 鐨?const 鎸囬拡銆?br>褰撳皢褰㈠弬鎸囧畾涓烘寚鍚戝瓧絎︾殑 const 鎸囬拡鏃訛紝鍙皢鎸囬拡浼犻掑埌 TCHAR 鏁扮粍錛堝瀛楃涓?["hi there"]錛夋垨浼犻掑埌 CString 瀵硅薄銆?br>CString 瀵硅薄灝嗚嚜鍔ㄨ漿鎹㈡垚 LPCTSTR銆備換浣曡兘澶熶嬌鐢?LPCTSTR 鐨勫湴鏂逛篃鑳藉浣跨敤 CString 瀵硅薄銆?/p>

2銆佸鏋滄煇涓艦鍙傚皢涓嶄細琚慨鏀癸紝鍒欎篃灝嗚鍙傛暟鎸囧畾涓哄父鏁板瓧絎︿覆寮曠敤錛堝嵆 const CString&錛夈傚鏋滃嚱鏁拌淇敼璇ュ瓧絎︿覆錛?br>鍒欏垹闄?const 淇グ絎︺傚鏋滈渶瑕侀粯璁や負絀哄鹼紝鍒欏皢鍏跺垵濮嬪寲涓虹┖瀛楃涓?[""]錛屽涓嬫墍紺猴細
void AddCustomer( const CString& name, const CString& address, const CString& comment = "" );

3銆佸浜庡ぇ澶氭暟鍑芥暟緇撴灉錛屾寜鍊艱繑鍥?CString 瀵硅薄鍗沖彲銆?/p>


涓茬殑鍩烘湰榪愮畻
    瀵逛簬涓茬殑鍩烘湰榪愮畻錛屽緢澶氶珮綰ц璦鍧囨彁渚涗簡鐩稿簲鐨勮繍綆楃鎴栨爣鍑嗙殑搴撳嚱鏁版潵瀹炵幇銆?br>涓哄彊榪版柟渚匡紝鍏堝畾涔夊嚑涓浉鍏崇殑鍙橀噺錛?br>    char s1[20]="dir/bin/appl",s2[20]="file.asm",s3[30],*p;
    int result;
    涓嬮潰浠璇█涓覆榪愮畻浠嬬粛涓茬殑鍩烘湰榪愮畻
1銆佹眰涓查暱
        int strlen(char *s);         //姹備覆s鐨勯暱搴?br>    銆愪緥銆憄rintf("%d",strlen(s1));    //杈撳嚭s1鐨勪覆闀?2

2銆佷覆澶嶅埗
    char *strcpy(char *to,*from)錛?/灝唂rom涓插鍒跺埌to涓蹭腑錛屽茍榪斿洖to寮濮嬪鎸囬拡
    銆愪緥銆憇trcpy(s3,s1);  //s3="dir/bin/appl",s1涓蹭笉鍙?/p>


3銆佽仈鎺?br>    char *strcat(char *to,char *from);//灝唂rom涓插鍒跺埌to涓茬殑鏈熬錛?br>                                      //騫惰繑鍥瀟o涓插紑濮嬪鐨勬寚閽?br>    銆愪緥銆憇trcat(s3,"/");    //s3="dir/bin/appl/"
         strcat(s3,s2);     //s3="dir/bin/appl/file.asm"

4銆佷覆姣旇緝
    int strcmp(char *s1,char *s2);//姣旇緝s1鍜宻2鐨勫ぇ灝忥紝
     //褰搒1<s2銆乻1>s2鍜宻1=s2鏃訛紝鍒嗗埆榪斿洖灝忎簬0銆佸ぇ浜?鍜岀瓑浜?鐨勫?
    銆愪緥銆憆esult=strcmp("baker","Baker");    //result>0
            result=strcmp("12","12");       //result=0
            result=strcmp("Joe","joseph")   //result<0

5銆佸瓧絎﹀畾浣?br>    char *strchr(char *s,char c);//鎵綾鍦ㄥ瓧絎︿覆s涓涓嬈″嚭鐜扮殑浣嶇疆錛?br>                                 //鑻ユ壘鍒幫紝鍒欒繑鍥炶浣嶇疆錛屽惁鍒欒繑鍥濶ULL
    銆愪緥銆憄=strchr(s2,'.');      //p鎸囧悜"file"涔嬪悗鐨勪綅緗?br>銆銆銆銆銆if(p) strcpy(p,".cpp");     //s2="file.cpp"

  娉ㄦ剰錛?br>    銆鈶犱笂榪版搷浣滄槸鏈鍩烘湰鐨勶紝鍏朵腑鍚?4涓搷浣滆繕鏈夊彉縐嶅艦寮忥細strncpy錛宻trncath鍜宻trnchr銆?br>    銆鈶″叾瀹冪殑涓叉搷浣滆C鐨?lt;string.h>銆傚湪涓嶅悓鐨勯珮綰ц璦涓紝瀵逛覆榪愮畻鐨勭綾誨強絎﹀彿閮戒笉灝界浉鍚?br>    銆鈶㈠叾浣欑殑涓叉搷浣滀竴鑸彲鐢辮繖浜涘熀鏈搷浣滅粍鍚堣屾垚

    銆愪緥銆戞眰瀛愪覆鐨勬搷浣滃彲濡備笅瀹炵幇錛?br>    void substr(char *sub,char *s,int pos,int len){
         //s鍜宻ub鏄瓧絎︽暟緇勶紝鐢╯ub榪斿洖涓瞫鐨勭pos涓瓧絎﹁搗闀垮害涓簂en鐨勫瓙涓?br>         //鍏朵腑0<=pos<=strlen(s)-1,涓旀暟緇剆ub鑷沖皯鍙綰砽en+1涓瓧絎︺?br>        if (pos<0||pos>strlen(s)-1||len<0)
            Error("parameter error!");
        strncpy(sub,&s[pos],len);      //浠巗[pos]璧峰鍒惰嚦澶歭en涓瓧絎﹀埌sub



]]>
CString 鎿嶄綔鎸囧崡http://m.shnenglu.com/brucejini/articles/99017.html璺漢鐢?/dc:creator>璺漢鐢?/author>Tue, 20 Oct 2009 08:16:00 GMThttp://m.shnenglu.com/brucejini/articles/99017.htmlhttp://m.shnenglu.com/brucejini/comments/99017.htmlhttp://m.shnenglu.com/brucejini/articles/99017.html#Feedback0http://m.shnenglu.com/brucejini/comments/commentRss/99017.htmlhttp://m.shnenglu.com/brucejini/services/trackbacks/99017.html

CString 鎿嶄綔鎸囧崡


鍘熻憲錛欽oseph M. Newcomer

緲昏瘧錛?a href="mailto:littleloach@sina.com">littleloach

鍘熸枃鍑哄錛?a target="_blank" >codeproject錛欳String Management


閫氳繃闃呰鏈枃浣犲彲浠ュ涔犲浣曟湁鏁堝湴浣跨敤 CString銆?br>
銆銆CString 鏄竴縐嶅緢鏈夌敤鐨勬暟鎹被鍨嬨傚畠浠緢澶х▼搴︿笂綆鍖栦簡MFC涓殑璁稿鎿嶄綔錛屼嬌寰桵FC鍦ㄥ仛瀛楃涓叉搷浣滅殑鏃跺欐柟渚夸簡寰堝銆備笉綆℃庢牱錛屼嬌鐢–String鏈夊緢澶氱壒孌婄殑鎶宸э紝鐗瑰埆鏄浜庣函C鑳屾櫙涓嬭蛋鍑烘潵鐨勭▼搴忓憳鏉ヨ鏈夌偣闅句互瀛︿範銆傝繖綃囨枃绔犲氨鏉ヨ璁鴻繖浜涙妧宸с?br> 銆銆浣跨敤CString鍙互璁╀綘瀵瑰瓧絎︿覆鐨勬搷浣滄洿鍔犵洿鎴簡褰撱傝繖綃囨枃绔犱笉鏄疌String鐨勫畬鍏ㄦ墜鍐岋紝浣嗗泭鎷簡澶ч儴鍒嗗父瑙佸熀鏈棶棰樸?br>
榪欑瘒鏂囩珷鍖呮嫭浠ヤ笅鍐呭錛?ol>

  • 鏍煎紡鍖栧瓧絎︿覆錛堝寘鎷?int 鍨嬭漿鍖栦負 CString 錛?/a>

  • CString 鍨嬪拰 char* 綾誨瀷鐨勭浉浜掕漿鍖?/a>
  • char* 杞寲鎴?CString
  • CString 杞寲鎴?char* 涔嬩竴錛氫嬌鐢↙PCTSTR寮哄埗杞寲
  • CString 杞寲鎴?char* 涔嬩簩錛氫嬌鐢–String瀵硅薄鐨凣etBuffer鏂規硶
  • CString 杞寲鎴?char* 涔嬩笁: 鍜屾帶浠剁殑鎺ュ彛
  • BSTR 鍨嬭漿鍖栨垚 CString 鍨?/a>錛?/li>
  • 杞藉叆瀛楃涓茶〃璧勬簮錛?/li>
  • CString 鐨勬晥鐜?/a>錛?/li>
  • 鎬葷粨
  • 涓嬮潰鎴戝垎鍒璁恒?br>
    1銆?b>

    瑕佹瘮鐢ㄤ笅闈㈢殑鏂規硶濂藉緱澶氾細

    char gray[] = "Gray";
    char cat[] = "Cat";
    char * graycat = malloc(strlen(gray) + strlen(cat) + 1);
    strcpy(graycat, gray);
    strcat(graycat, cat);

    2銆?b>鏍煎紡鍖栧瓧絎︿覆

    銆銆涓庡叾鐢?sprintf() 鍑芥暟鎴?wsprintf() 鍑芥暟鏉ユ牸寮忓寲涓涓瓧絎︿覆錛岃繕涓嶅鐢?CString 瀵硅薄鐨凢ormat()鏂規硶錛?/p>

    CString s;
    s.Format(_T("The total is %d"), total);

    銆銆鐢ㄨ繖縐嶆柟娉曠殑濂藉鏄綘涓嶇敤鎷呭績鐢ㄦ潵瀛樻斁鏍煎紡鍖栧悗鏁版嵁鐨勭紦鍐插尯鏄惁瓚沖澶э紝榪欎簺宸ヤ綔鐢盋String綾繪浛浣犲畬鎴愩?br> 銆銆鏍煎紡鍖栨槸涓縐嶆妸鍏跺畠涓嶆槸瀛楃涓茬被鍨嬬殑鏁版嵁杞寲涓篊String綾誨瀷鐨勬渶甯哥敤鎶宸э紝姣斿錛屾妸涓涓暣鏁拌漿鍖栨垚CString綾誨瀷錛屽彲鐢ㄥ涓嬫柟娉曪細

    CString s;
    s.Format(_T("%d"), total);

    銆銆鎴戞繪槸瀵規垜鐨勫瓧絎︿覆浣跨敤_T()瀹忥紝榪欐槸涓轟簡璁╂垜鐨勪唬鐮佽嚦灝戞湁Unicode鐨勬剰璇嗭紝褰撶劧錛屽叧浜嶶nicode鐨勮瘽棰樹笉鍦ㄨ繖綃囨枃绔犵殑璁ㄨ鑼冨洿銆俖T()瀹忓湪8浣嶅瓧絎︾幆澧冧笅鏄涓嬪畾涔夌殑錛?/p>

    #define _T(x) x // 闈濽nicode鐗堟湰錛坣on-Unicode version錛?/pre>
          

    鑰屽湪Unicode鐜涓嬫槸濡備笅瀹氫箟鐨勶細

    #define _T(x) L##x // Unicode鐗堟湰錛圲nicode version錛?/pre>
          

    鎵浠ュ湪Unicode鐜涓嬶紝瀹冪殑鏁堟灉灝辯浉褰撲簬錛?/p>

    s.Format(L"%d", total);

    銆銆濡傛灉浣犺涓轟綘鐨勭▼搴忓彲鑳藉湪Unicode鐨勭幆澧冧笅榪愯錛岄偅涔堝紑濮嬪湪鎰忕敤 Unicode 緙栫爜銆傛瘮濡傝錛屼笉瑕佺敤 sizeof() 鎿嶄綔絎︽潵鑾峰緱瀛楃涓茬殑闀垮害錛屽洜涓哄湪Unicode鐜涓嬪氨浼氭湁2鍊嶇殑璇樊銆傛垜浠彲浠ョ敤涓浜涙柟娉曟潵闅愯棌Unicode鐨勪竴浜涚粏鑺傦紝姣斿鍦ㄦ垜闇瑕佽幏寰楀瓧絎﹂暱搴︾殑鏃跺欙紝鎴戜細鐢ㄤ竴涓彨鍋欴IM鐨勫畯錛岃繖涓畯鏄湪鎴戠殑dim.h鏂囦歡涓畾涔夌殑錛屾垜浼氬湪鎴戝啓鐨勬墍鏈夌▼搴忎腑閮藉寘鍚繖涓枃浠訛細

    #define DIM(x) ( sizeof((x)) / sizeof((x)[0]) )
    銆銆榪欎釜瀹忎笉浠呭彲浠ョ敤鏉ヨВ鍐砋nicode鐨勫瓧絎︿覆闀垮害鐨勯棶棰橈紝涔熷彲浠ョ敤鍦ㄧ紪璇戞椂瀹氫箟鐨勮〃鏍間笂錛屽畠鍙互鑾峰緱琛ㄦ牸鐨勯」鏁幫紝濡備笅錛?br>
    class Whatever { ... };
    Whatever data[] = {
       { ... },
        ...
       { ... },
    };
    for(int i = 0; i < DIM(data); i++) // 鎵弿琛ㄦ牸瀵繪壘鍖歸厤欏廣?
    
    銆銆榪欓噷瑕佹彁閱掍綘鐨勫氨鏄竴瀹氳娉ㄦ剰閭d簺鍦ㄥ弬鏁頒腑闇瑕佺湡瀹炲瓧鑺傛暟鐨凙PI鍑芥暟璋冪敤錛屽鏋滀綘浼犻掑瓧絎︿釜鏁扮粰瀹冿紝瀹冨皢涓嶈兘姝e父宸ヤ綔銆傚涓嬶細
    TCHAR data[20];
    lstrcpyn(data, longstring, sizeof(data) - 1); // WRONG!
    lstrcpyn(data, longstring, DIM(data) - 1); // RIGHT
    WriteFile(f, data, DIM(data), &bytesWritten, NULL); // WRONG!
    WriteFile(f, data, sizeof(data), &bytesWritten, NULL); // RIGHT

    閫犳垚浠ヤ笂鍘熷洜鏄洜涓簂strcpyn闇瑕佷竴涓瓧絎︿釜鏁頒綔涓哄弬鏁幫紝浣嗘槸WriteFile鍗撮渶瑕佸瓧鑺傛暟浣滀負鍙傛暟銆?br> 鍚屾牱闇瑕佹敞鎰忕殑鏄湁鏃跺欓渶瑕佸啓鍑烘暟鎹殑鎵鏈夊唴瀹廣傚鏋滀綘浠呬粎鍙兂鍐欏嚭鏁版嵁鐨勭湡瀹為暱搴︼紝浣犲彲鑳戒細璁や負浣犲簲璇ヨ繖鏍峰仛錛?/p>

    WriteFile(f, data, lstrlen(data), &bytesWritten, NULL); // WRONG

    浣嗘槸鍦║nicode鐜涓嬶紝瀹冧笉浼氭甯稿伐浣溿傛紜殑鍋氭硶搴旇鏄繖鏍鳳細

    WriteFile(f, data, lstrlen(data) * sizeof(TCHAR), &bytesWritten, NULL); // RIGHT

    銆銆鍥犱負WriteFile闇瑕佺殑鏄竴涓互瀛楄妭涓哄崟浣嶇殑闀垮害銆傦紙鍙兘鏈変簺浜轟細鎯?#8220;鍦ㄩ潪Unicode鐨勭幆澧冧笅榪愯榪欒浠g爜錛屽氨鎰忓懗鐫鎬繪槸鍦ㄥ仛涓涓浣欑殑涔?鎿嶄綔錛岃繖鏍蜂笉浼氶檷浣庣▼搴忕殑鏁堢巼鍚楋紵”榪欑鎯蟲硶鏄浣欑殑錛屼綘蹇呴』瑕佷簡瑙g紪璇戝櫒瀹為檯涓婂仛浜嗕粈涔堬紝娌℃湁鍝竴涓狢鎴朇++緙栬瘧鍣ㄤ細鎶婅繖縐嶆棤鑱婄殑涔?鎿嶄綔鐣欏湪浠g爜涓傚湪Unicode鐜涓嬭繍琛岀殑鏃跺欙紝浣犱篃涓嶅繀鎷呭績閭d釜涔?鎿嶄綔浼氶檷浣庣▼搴忕殑鏁堢巼錛岃浣忥紝榪欏彧鏄竴涓乏縐諱竴浣嶇殑鎿嶄綔鑰屽凡錛岀紪璇戝櫒涔熷緢涔愭剰涓轟綘鍋氳繖縐嶆浛鎹€傦級
    銆銆浣跨敤_T瀹忓茍涓嶆槸鎰忓懗鐫浣犲凡緇忓垱寤轟簡涓涓猆nicode鐨勭▼搴忥紝浣犲彧鏄垱寤轟簡涓涓湁Unicode鎰忚瘑鐨勭▼搴忚屽凡銆傚鏋滀綘鍦ㄩ粯璁ょ殑8-bit妯″紡涓嬬紪璇戜綘鐨勭▼搴忕殑璇濓紝寰楀埌鐨勫皢鏄竴涓櫘閫氱殑8-bit鐨勫簲鐢ㄧ▼搴忥紙榪欓噷鐨?-bit鎸囩殑鍙槸8浣嶇殑瀛楃緙栫爜錛屽茍涓嶆槸鎸?浣嶇殑璁$畻鏈虹郴緇燂級錛涘綋浣犲湪Unicode鐜涓嬬紪璇戜綘鐨勭▼搴忔椂錛屼綘鎵嶄細寰楀埌涓涓猆nicode鐨勭▼搴忋傝浣忥紝CString 鍦?Unicode 鐜涓嬶紝閲岄潰鍖呭惈鐨勫彲閮芥槸16浣嶇殑瀛楃鍝︺?br>
    3銆?b>

    4銆?b>

    鎴栬呰繖鏍鳳細

    CString graycat("Gray" + "Cat");

    銆銆浜嬪疄涓婏紝緙栬瘧鍣ㄥ皢鎶辨ㄤ笂闈㈢殑榪欎簺灝濊瘯銆備負浠涔堝憿錛熷洜涓洪拡瀵笴String 鍜?LPCTSTR鏁版嵁綾誨瀷鐨勫悇縐嶅悇鏍風殑緇勫悎錛?#8220; +” 榪愮畻絎? 琚畾涔夋垚涓涓噸杞芥搷浣滅銆傝屼笉鏄袱涓?LPCTSTR 鏁版嵁綾誨瀷錛屽畠鏄簳灞傛暟鎹被鍨嬨備綘涓嶈兘瀵瑰熀鏈暟鎹紙濡?int銆乧har 鎴栬?char*錛夌被鍨嬮噸杞?C++ 鐨勮繍綆楃銆備綘鍙互璞′笅闈㈣繖鏍峰仛錛?/p>

    CString graycat = CString("Gray") + CString("Cat");

    鎴栬呰繖鏍鳳細

    CString graycat = CString("Gray") + "Cat";

    鐮旂┒涓鐣氨浼氬彂鐜幫細“ +”鎬繪槸浣跨敤鍦ㄨ嚦灝戞湁涓涓?CString 瀵硅薄鍜屼竴涓? LPCSTR 鐨勫満鍚堛?br>
    娉ㄦ剰錛岀紪鍐欐湁 Unicode 鎰忚瘑鐨勪唬鐮佹繪槸涓浠跺ソ浜嬶紝姣斿錛?/p>

    CString graycat = CString(_T("Gray")) + _T("Cat");

    榪欏皢浣垮緱浣犵殑浠g爜鍙互鐩存帴縐繪銆?br>
    char* 杞寲涓?CString

    銆銆鐜板湪浣犳湁涓涓?char* 綾誨瀷鐨勬暟鎹紝鎴栬呰涓涓瓧絎︿覆銆傛庝箞鏍峰垱寤?CString 瀵硅薄鍛紵榪欓噷鏈変竴浜涗緥瀛愶細

    char * p = "This is a test";

    鎴栬呰薄涓嬮潰榪欐牱鏇村叿鏈?Unicode 鎰忚瘑錛?/p>

    TCHAR * p = _T("This is a test")

    鎴?/p>

    LPTSTR p = _T("This is a test");

    浣犲彲浠ヤ嬌鐢ㄤ笅闈換鎰忎竴縐嶅啓娉曪細

    CString s = "This is a test"; // 8-bit only
    CString s = _T("This is a test"); // Unicode-aware
    CString s("This is a test"); // 8-bit only
    CString s(_T("This is a test")); // Unicode-aware
    CString s = p;
    CString s(p);

    銆銆鐢ㄨ繖浜涙柟娉曞彲浠ヨ交鏉懼皢甯擱噺瀛楃涓叉垨鎸囬拡杞崲鎴?CString銆傞渶瑕佹敞鎰忕殑鏄紝瀛楃鐨勮祴鍊兼繪槸琚嫹璐濆埌 CString 瀵硅薄涓幓鐨勶紝鎵浠ヤ綘鍙互璞′笅闈㈣繖鏍鋒搷浣滐細

    TCHAR * p = _T("Gray");
    CString s(p);
    p = _T("Cat");
    s += p;

    緇撴灉瀛楃涓茶偗瀹氭槸“GrayCat”銆?br>
    CString 綾昏繕鏈夊嚑涓叾瀹冪殑鏋勯犲嚱鏁幫紝浣嗘槸榪欓噷鎴戜滑涓嶈冭檻瀹冿紝濡傛灉浣犳湁鍏磋叮鍙互鑷繁鏌ョ湅鐩稿叧鏂囨。銆?br>
    浜嬪疄涓婏紝CString 綾葷殑鏋勯犲嚱鏁版瘮鎴戝睍紺虹殑瑕佸鏉傦紝姣斿錛?/p>

    CString s = "This is a test"; 

    銆銆榪欐槸寰堣崏鐜囩殑緙栫爜錛屼絾鏄疄闄呬笂瀹冨湪 Unicode 鐜涓嬭兘緙栬瘧閫氳繃銆傚畠鍦ㄨ繍琛屾椂璋冪敤鏋勯犲嚱鏁扮殑 MultiByteToWideChar 鎿嶄綔灝?8 浣嶅瓧絎︿覆杞崲鎴?16 浣嶅瓧絎︿覆銆備笉綆℃庢牱錛屽鏋?char * 鎸囬拡鏄綉緇滀笂浼犺緭鐨?8 浣嶆暟鎹紝榪欑杞崲鏄緢鏈夌敤鐨勩?br>
    CString 杞寲鎴?char* 涔嬩竴錛?/b>寮哄埗綾誨瀷杞崲涓?LPCTSTR錛?br>
    銆銆榪欐槸涓縐嶇暐寰‖鎬х殑杞崲錛屾湁鍏?#8220;姝g‘”鐨勫仛娉曪紝浜轟滑鍦ㄨ璇嗕笂榪樺瓨鍦ㄨ澶氭販涔憋紝姝g‘鐨勪嬌鐢ㄦ柟娉曟湁寰堝錛屼絾閿欒鐨勪嬌鐢ㄦ柟娉曞彲鑳戒笌姝g‘鐨勪嬌鐢ㄦ柟娉曚竴鏍峰銆?br> 銆銆鎴戜滑棣栧厛瑕佷簡瑙?CString 鏄竴縐嶅緢鐗規畩鐨?C++ 瀵硅薄錛屽畠閲岄潰鍖呭惈浜嗕笁涓鹼細涓涓寚鍚戞煇涓暟鎹紦鍐插尯鐨勬寚閽堛佷竴涓槸璇ョ紦鍐蹭腑鏈夋晥鐨勫瓧絎﹁鏁頒互鍙婁竴涓紦鍐插尯闀垮害銆? 鏈夋晥瀛楃鏁扮殑澶у皬鍙互鏄粠0鍒拌緙撳啿鏈澶ч暱搴﹀煎噺1涔嬮棿鐨勪換浣曟暟錛堝洜涓哄瓧絎︿覆緇撳熬鏈変竴涓狽ULL瀛楃錛夈傚瓧絎﹁鏁板拰緙撳啿鍖洪暱搴﹁宸у闅愯棌銆?br> 銆銆闄ら潪浣犲仛涓浜涚壒孌婄殑鎿嶄綔錛屽惁鍒欎綘涓嶅彲鑳界煡閬撶粰CString瀵硅薄鍒嗛厤鐨勭紦鍐插尯鐨勯暱搴︺傝繖鏍鳳紝鍗充嬌浣犺幏寰椾簡璇?緙撳啿鐨勫湴鍧錛屼綘涔熸棤娉曟洿鏀瑰叾涓殑鍐呭錛屼笉鑳芥埅鐭瓧絎︿覆錛屼篃 緇濆娌℃湁鍔炴硶鍔犻暱瀹冪殑鍐呭錛屽惁鍒欑涓鏃墮棿灝變細鐪嬪埌婧㈠嚭銆?br> 銆銆LPCTSTR 鎿嶄綔絎︼紙鎴栬呮洿鏄庣‘鍦拌灝辨槸 TCHAR * 鎿嶄綔絎︼級鍦?CString 綾諱腑琚噸杞戒簡錛岃鎿嶄綔絎︾殑瀹氫箟鏄繑鍥炵紦鍐插尯鐨勫湴鍧錛屽洜姝わ紝濡傛灉浣犻渶瑕佷竴涓寚鍚?CString 鐨? 瀛楃涓叉寚閽堢殑璇濓紝鍙互榪欐牱鍋氾細

    CString s("GrayCat");
    LPCTSTR p = s;

    銆銆瀹冨彲浠ユ紜湴榪愯銆傝繖鏄敱C璇█鐨勫己鍒剁被鍨嬭漿鍖栬鍒欏疄鐜扮殑銆傚綋闇瑕佸己鍒剁被鍨嬭漿鍖栨椂錛孋++瑙勬祴瀹硅榪欑閫夋嫨銆傛瘮濡傦紝浣犲彲浠ュ皢錛堟誕鐐規暟錛夊畾涔変負灝嗘煇涓鏁? 錛堟湁涓瀵規誕鐐規暟錛夎繘琛屽己鍒剁被鍨嬭漿鎹㈠悗鍙繑鍥炶澶嶆暟鐨勭涓涓誕鐐規暟錛堜篃灝辨槸鍏跺疄閮級銆傚彲浠ヨ薄涓嬮潰榪欐牱錛?/p>

    Complex c(1.2f, 4.8f);
    float realpart = c;

    濡傛灉(float)鎿嶄綔絎﹀畾涔夋紜殑璇濓紝閭d箞瀹為儴鐨勭殑鍊煎簲璇ユ槸1.2銆?br> 銆銆榪欑寮哄埗杞寲閫傚悎鎵鏈夎繖縐嶆儏鍐碉紝渚嬪錛屼換浣曞甫鏈?LPCTSTR 綾誨瀷鍙傛暟鐨勫嚱鏁伴兘浼氬己鍒舵墽琛岃繖縐嶈漿鎹€? 浜庢槸錛屼綘鍙兘鏈夎繖鏍蜂竴涓嚱鏁幫紙涔熻鍦ㄦ煇涓綘涔版潵鐨凞LL涓級錛?/p>

    BOOL DoSomethingCool(LPCTSTR s);

    浣犺薄涓嬮潰榪欐牱璋冪敤瀹冿細

    CString file("c:\\myfiles\\coolstuff")
    BOOL result = DoSomethingCool(file);

    銆銆瀹冭兘姝g‘榪愯銆傚洜涓?DoSomethingCool 鍑芥暟宸茬粡璇存槑浜嗛渶瑕佷竴涓?LPCTSTR 綾誨瀷鐨勫弬鏁幫紝鍥犳 LPCTSTR 琚簲鐢ㄤ簬璇ュ弬鏁幫紝鍦?MFC 涓氨鏄繑鍥炵殑涓插湴鍧銆?br>
    濡傛灉浣犺鏍煎紡鍖栧瓧絎︿覆鎬庝箞鍔炲憿錛?/p>

    CString graycat("GrayCat");
    CString s;
    s.Format("Mew! I love %s", graycat);

    銆銆娉ㄦ剰鐢變簬鍦ㄥ彲鍙樺弬鏁板垪琛ㄤ腑鐨勫鹼紙鍦ㄥ嚱鏁拌鏄庝腑鏄互“...”琛ㄧず鐨勶級騫舵病鏈夐殣鍚竴涓己鍒剁被鍨嬭漿鎹㈡搷浣滅銆備綘浼氬緱鍒頒粈涔堢粨鏋滃憿錛?br> 銆銆涓涓護浜烘儕璁剁殑緇撴灉錛屾垜浠緱鍒扮殑瀹為檯緇撴灉涓叉槸錛?/p>

    "Mew! I love GrayCat"銆?/pre>
          

    銆銆鍥犱負 MFC 鐨勮璁¤呬滑鍦ㄨ璁?CString 鏁版嵁綾誨瀷鏃墮潪甯稿皬蹇冿紝 CString 綾誨瀷琛ㄨ揪寮忔眰鍊煎悗鎸囧悜浜嗗瓧絎︿覆錛屾墍浠ヨ繖閲岀湅涓嶅埌浠諱綍璞? Format 鎴?sprintf 涓殑寮哄埗綾誨瀷杞崲錛屼綘浠嶇劧鍙互寰楀埌姝g‘鐨勮涓恒傛弿榪?CString 鐨勯檮鍔犳暟鎹疄闄呬笂鍦?CString 鍚嶄箟鍦板潃涔嬪悗銆?br> 銆銆鏈変竴浠朵簨鎯呬綘鏄笉鑳藉仛鐨勶紝閭e氨鏄慨鏀瑰瓧絎︿覆銆傛瘮濡傦紝浣犲彲鑳戒細灝濊瘯鐢?#8220;,”浠f浛“.”錛堜笉瑕佸仛榪欐牱鐨勶紝濡傛灉浣犲湪涔庡浗闄呭寲闂錛屼綘搴旇浣跨敤鍗佽繘鍒惰漿鎹㈢殑 National Language Support 鐗規э紝錛夛紝涓嬮潰鏄釜綆鍗曠殑渚嬪瓙錛?/p>

    CString v("1.00"); // 璐у竵閲戦錛屼袱浣嶅皬鏁?
    LPCTSTR p = v;
    p[lstrlen(p) - 3] = '','';

    銆銆榪欐椂緙栬瘧鍣ㄤ細鎶ラ敊錛屽洜涓轟綘璧嬪間簡涓涓父閲忎覆銆傚鏋滀綘鍋氬涓嬪皾璇曪紝緙栬瘧鍣ㄤ篃浼氶敊錛?/p>

    strcat(p, "each");

    銆銆鍥犱負 strcat 鐨勭涓涓弬鏁板簲璇ユ槸 LPTSTR 綾誨瀷鐨勬暟鎹紝鑰屼綘鍗寸粰浜嗕竴涓?LPCTSTR銆?br>
    銆銆涓嶈璇曞浘閽昏繖涓敊璇秷鎭殑鐗涜灝栵紝榪欏彧浼氫嬌浣犺嚜宸遍櫡鍏ラ夯鐑︼紒

    銆銆鍘熷洜鏄紦鍐叉湁涓涓鏁幫紝瀹冩槸涓嶅彲瀛樺彇鐨勶紙瀹冧綅浜?CString 鍦板潃涔嬩笅鐨勪竴涓殣钘忓尯鍩燂級錛屽鏋滀綘鏀瑰彉榪欎釜涓詫紝緙撳啿涓殑瀛楃璁℃暟涓嶄細鍙嶆槧鎵鍋氱殑淇敼銆傛澶栵紝濡傛灉瀛楃涓查暱搴︽伆濂芥槸璇ュ瓧絎︿覆鐗╃悊闄愬埗鐨勯暱搴︼紙姊㈠悗榪樹細璁插埌榪欎釜闂錛夛紝閭d箞鎵╁睍璇ュ瓧絎︿覆灝嗘敼鍐欑紦鍐蹭互澶栫殑浠諱綍鏁版嵁錛岄偅鏄綘鏃犳潈榪涜鍐欐搷浣滅殑鍐呭瓨錛堜笉瀵瑰悧錛燂級錛屼綘浼氭瘉鎹㈠潖涓嶅睘浜庝綘鐨勫唴瀛樸傝繖鏄簲鐢ㄧ▼搴忕湡姝g殑姝諱骸澶勬柟銆?/p>

    CString杞寲鎴恈har* 涔嬩簩錛?/b>浣跨敤 CString 瀵硅薄鐨?GetBuffer 鏂規硶錛?br>
    銆銆濡傛灉浣犻渶瑕佷慨鏀?CString 涓殑鍐呭錛屽畠鏈変竴涓壒孌婄殑鏂規硶鍙互浣跨敤錛岄偅灝辨槸 GetBuffer錛屽畠鐨勪綔鐢ㄦ槸榪斿洖涓涓彲鍐欑殑緙撳啿鎸囬拡銆? 濡傛灉浣犲彧鏄墦綆椾慨鏀瑰瓧絎︽垨鑰呮埅鐭瓧絎︿覆錛屼綘瀹屽叏鍙互榪欐牱鍋氾細

    CString s(_T("File.ext"));
    LPTSTR p = s.GetBuffer();
    LPTSTR dot = strchr(p, ''.''); // OK, should have used s.Find...
    if(p != NULL)
    *p = _T(''\0'');
    s.ReleaseBuffer();

    銆銆榪欐槸 GetBuffer 鐨勭涓縐嶇敤娉曪紝涔熸槸鏈綆鍗曠殑涓縐嶏紝涓嶇敤緇欏畠浼犻掑弬鏁幫紝瀹冧嬌鐢ㄩ粯璁ゅ?0錛屾剰鎬濇槸錛?#8220;緇欐垜榪欎釜瀛楃涓茬殑鎸囬拡錛屾垜淇濊瘉涓嶅姞闀垮畠”銆傚綋浣犺皟鐢?ReleaseBuffer 鏃訛紝瀛楃涓茬殑瀹為檯闀垮害浼氳閲嶆柊璁$畻錛岀劧鍚庡瓨鍏?CString 瀵硅薄涓?br> 銆銆蹇呴』寮鴻皟涓鐐癸紝鍦?GetBuffer 鍜?ReleaseBuffer 涔嬮棿榪欎釜鑼冨洿錛屼竴瀹氫笉鑳戒嬌鐢ㄤ綘瑕佹搷浣滅殑榪欎釜緙撳啿鐨?CString 瀵硅薄鐨勪換浣曟柟娉曘傚洜涓?ReleaseBuffer 琚皟鐢ㄤ箣鍓嶏紝璇?CString 瀵硅薄鐨勫畬鏁存у緱涓嶅埌淇濋殰銆傜爺絀朵互涓嬩唬鐮侊細

    CString s(...);
    
    LPTSTR p = s.GetBuffer();
    
    //... 榪欎釜鎸囬拡 p 鍙戠敓浜嗗緢澶氫簨鎯?
    
    int n = s.GetLength(); // 寰堢碂D!!!!! 鏈夊彲鑳界粰鍑洪敊璇殑絳旀!!!
    
    s.TrimRight(); // 寰堢碂!!!!! 涓嶈兘淇濊瘉鑳芥甯稿伐浣?!!!
    
    s.ReleaseBuffer(); // 鐜板湪搴旇 OK
    
    int m = s.GetLength(); // 榪欎釜緇撴灉鍙互淇濊瘉鏄紜殑銆?
    
    s.TrimRight(); // 灝嗘甯稿伐浣溿?/pre>
          

    銆銆鍋囪浣犳兂澧炲姞瀛楃涓茬殑闀垮害錛屼綘棣栧厛瑕佺煡閬撹繖涓瓧絎︿覆鍙兘浼氭湁澶氶暱錛屽ソ姣旀槸澹版槑瀛楃涓叉暟緇勭殑鏃跺欑敤錛?/p>

    char buffer[1024];

    琛ㄧず 1024 涓瓧絎︾┖闂磋凍浠ヨ浣犲仛浠諱綍鎯沖仛寰椾簨鎯呫傚湪 CString 涓笌涔嬫剰涔夌浉絳夌殑琛ㄧず娉曪細

    LPTSTR p = s.GetBuffer(1024);

    銆銆璋冪敤榪欎釜鍑芥暟鍚庯紝浣犱笉浠呰幏寰椾簡瀛楃涓茬紦鍐插尯鐨勬寚閽堬紝鑰屼笖鍚屾椂榪樿幏寰椾簡闀垮害鑷沖皯涓?1024 涓瓧絎︾殑絀洪棿錛堟敞鎰忥紝鎴戣鐨勬槸“瀛楃”錛岃屼笉鏄?#8220;瀛楄妭”錛屽洜涓?CString 鏄互闅愬惈鏂瑰紡鎰熺煡 Unicode 鐨勶級銆?br> 銆銆鍚屾椂錛岃繕搴旇娉ㄦ剰鐨勬槸錛屽鏋滀綘鏈変竴涓父閲忎覆鎸囬拡錛岃繖涓覆鏈韓鐨勫艱瀛樺偍鍦ㄥ彧璇誨唴瀛樹腑錛屽鏋滆瘯鍥懼瓨鍌ㄥ畠錛屽嵆浣夸綘宸茬粡璋冪敤浜?GetBuffer 錛屽茍鑾峰緱涓涓彧璇誨唴瀛樼殑鎸囬拡錛屽瓨鍏ユ搷浣滀細澶辮觸錛屽茍鎶ュ憡瀛樺彇閿欒銆傛垜娌℃湁鍦?CString 涓婅瘉鏄庤繖涓鐐癸紝浣嗘垜鐪嬪埌榪囧ぇ鎶婄殑 C 紼嬪簭鍛樼粡甯哥姱榪欎釜閿欒銆?br> 銆銆C 紼嬪簭鍛樻湁涓涓氱梾鏄垎閰嶄竴涓浐瀹氶暱搴︾殑緙撳啿錛屽瀹冭繘琛?sprintf 鎿嶄綔錛岀劧鍚庡皢瀹冭祴鍊肩粰涓涓?CString錛?/p>

    char buffer[256];
    sprintf(buffer, "%......", args, ...); // ... 閮ㄥ垎鐪佺暐璁稿緇嗚妭
    CString s = buffer;

    铏界劧鏇村ソ鐨勫艦寮忓彲浠ヨ繖涔堝仛錛?/p>

    CString s;
    s.Format(_T("%...."), args, ...);

    濡傛灉浣犵殑瀛楃涓查暱搴︿竾涓瓚呰繃 256 涓瓧絎︾殑鏃跺欙紝涓嶄細鐮村潖鍫嗘爤銆?br>
    銆銆鍙﹀涓涓父瑙佺殑閿欒鏄細鏃㈢劧鍥哄畾澶у皬鐨勫唴瀛樹笉宸ヤ綔錛岄偅涔堝氨閲囩敤鍔ㄦ佸垎閰嶅瓧鑺傦紝榪欑鍋氭硶寮婄鏇村ぇ錛?/p>

    int len = lstrlen(parm1) + 13  lstrlen(parm2) + 10 + 100;
    
    char * buffer = new char[len];
    
    sprintf(buffer, "%s is equal to %s, valid data", parm1, parm2);
    
    CString s = buffer;
    
    ......
    
    delete [] buffer;

    瀹冨彲浠ヨ兘琚畝鍗曞湴鍐欐垚錛?/p>

    CString s;
    
    s.Format(_T("%s is equal to %s, valid data"), parm1, parm2);

    銆銆闇瑕佹敞鎰?sprintf 渚嬪瓙閮戒笉鏄?Unicode 灝辯華鐨勶紝灝界浣犲彲浠ヤ嬌鐢?tsprintf 浠ュ強鐢?_T() 鏉ュ寘鍥存牸寮忓寲瀛楃涓詫紝浣嗘槸鍩烘湰 鎬濊礬浠嶇劧鏄湪璧板集璺紝榪欒繖鏍峰緢瀹規槗鍑洪敊銆?br>
    CString to char * 涔嬩笁錛?/b>鍜屾帶浠剁殑鎺ュ彛錛?br>
    銆銆鎴戜滑緇忓父闇瑕佹妸涓涓?CString 鐨勫間紶閫掔粰涓涓帶浠訛紝姣斿錛孋TreeCtrl銆侻FC涓烘垜浠彁渚涗簡寰堝渚垮埄鏉ラ噸杞借繖涓搷浣滐紝浣嗘槸 鍦ㄥぇ澶氭暟鎯呭喌涓嬶紝浣犱嬌鐢?#8220;鍘熷”褰㈠紡鐨勬洿鏂幫紝鍥犳闇瑕佸皢澧ㄦ煇涓覆鎸囬拡瀛樺偍鍒?TVINSERTITEMSTRUCT 緇撴瀯鐨?TVITEM 鎴愬憳涓傚涓嬶細

    TVINSERTITEMSTRUCT tvi;
    CString s;
    // ... 涓簊璧嬩竴浜涘箋?
    tvi.item.pszText = s; // Compiler yells at you here
    // ... 濉啓tvi鐨勫叾浠栧煙
    HTREEITEM ti = c_MyTree.InsertItem(&tvi);

    銆銆涓轟粈涔堢紪璇戝櫒浼氭姤閿欏憿錛熸槑鏄庣湅璧鋒潵寰堝畬緹庣殑鐢ㄦ硶鍟婏紒浣嗘槸浜嬪疄涓婂鏋滀綘鐪嬬湅 TVITEM 緇撴瀯鐨勫畾涔変綘灝變細鏄庣櫧錛屽湪 TVITEM 緇撴瀯涓?pszText 鎴愬憳鐨勫0鏄庡涓嬶細

    LPTSTR pszText;
    int cchTextMax;

    銆銆鍥犳錛岃祴鍊間笉鏄祴緇欎竴涓?LPCTSTR 綾誨瀷鐨勫彉閲忥紝鑰屼笖緙栬瘧鍣ㄦ棤娉曠煡閬撳浣曞皢璧嬪艱鍙ュ彸杈瑰己鍒惰漿鎹㈡垚 LPCTSTR銆傚ソ鍚э紝浣犺錛岄偅鎴戝氨鏀規垚榪欐牱錛?/p>

    tvi.item.pszText = (LPCTSTR)s; //緙栬瘧鍣ㄤ緷鐒朵細鎶ラ敊銆?/pre>
          

    銆銆緙栬瘧鍣ㄤ箣鎵浠ヤ緷鐒舵姤閿欐槸鍥犱負浣犺瘯鍥炬妸涓涓?LPCTSTR 綾誨瀷鐨勫彉閲忚祴鍊肩粰涓涓?LPTSTR 綾誨瀷鐨勫彉閲忥紝榪欑鎿嶄綔鍦–鎴朇++涓槸琚姝㈢殑銆備綘涓嶈兘鐢ㄨ繖縐嶆柟娉? 鏉ユ互鐢ㄥ父閲忔寚閽堜笌闈炲父閲忔寚閽堟蹇碉紝鍚﹀垯錛屼細鎵頒貢緙栬瘧鍣ㄧ殑浼樺寲鏈哄埗錛屼嬌涔嬩笉鐭ュ浣曚紭鍖栦綘鐨勭▼搴忋傛瘮濡傦紝濡傛灉浣犺繖涔堝仛錛?/p>

    const int i = ...;
    //... do lots of stuff
    ... = a[i]; // usage 1
    // ... lots more stuff
    ... = a[i]; // usage 2

    銆銆閭d箞錛岀紪璇戝櫒浼氫互涓烘棦鐒?i 鏄?const 錛屾墍浠?usage1鍜寀sage2鐨勫兼槸鐩稿悓鐨勶紝騫朵笖瀹冪敋鑷寵兘浜嬪厛璁$畻濂?usage1 澶勭殑 a[i] 鐨勫湴鍧錛岀劧鍚庝繚鐣欑潃鍦ㄥ悗闈㈢殑 usage2 澶勪嬌鐢紝鑰屼笉鏄噸鏂拌綆椼傚鏋滀綘鎸夊涓嬫柟寮忓啓鐨勮瘽錛?/p>

    const int i = ...;
    int * p = &i;
    //... do lots of stuff
    ... = a[i]; // usage 1
    // ... lots more stuff
    (*p)++; // mess over compiler''s assumption
    // ... and other stuff
    ... = a[i]; // usage 2

    銆銆緙栬瘧鍣ㄥ皢璁や負 i 鏄父閲忥紝浠庤?a[i] 鐨勪綅緗篃鏄父閲忥紝榪欐牱闂存帴鍦扮牬鍧忎簡鍏堝墠鐨勫亣璁俱傚洜姝わ紝浣犵殑紼嬪簭灝嗕細鍦?debug 緙栬瘧妯″紡錛堟病鏈変紭鍖栵級鍜?release 緙栬瘧妯″紡錛堝畬鍏ㄤ紭鍖栵級涓弽鏄犲嚭涓嶅悓鐨勮涓猴紝榪欑鎯呭喌鍙笉濂斤紝鎵浠ュ綋浣犺瘯鍥炬妸鎸囧悜 i 鐨勬寚閽堣祴鍊肩粰涓涓? 鍙慨鏀圭殑寮曠敤鏃訛紝浼氳緙栬瘧鍣ㄨ瘖鏂負榪欐槸涓縐嶄吉閫犮傝繖灝辨槸涓轟粈涔堬紙LPCTSTR錛夊己鍒剁被鍨嬭漿鍖栦笉璧蜂綔鐢ㄧ殑鍘熷洜銆?br> 銆銆涓轟粈涔堜笉鎶婅鎴愬憳澹版槑鎴?LPCTSTR 綾誨瀷鍛紵鍥犱負榪欎釜緇撴瀯琚敤浜庤鍐欐帶浠躲傚綋浣犲悜鎺т歡鍐欐暟鎹椂錛屾枃鏈寚閽堝疄闄呬笂琚綋鎴?LPCTSTR錛岃屽綋浣犱粠鎺т歡璇繪暟鎹? 鏃訛紝浣犲繀欏繪湁涓涓彲鍐欑殑瀛楃涓層傝繖涓粨鏋勬棤娉曞尯鍒嗗畠鏄敤鏉ヨ榪樻槸鐢ㄦ潵鍐欍?br>
    鍥犳錛屼綘浼氬父甯稿湪鎴戠殑浠g爜涓湅鍒板涓嬬殑鐢ㄦ硶錛?/p>

    tvi.item.pszText = (LPTSTR)(LPCTSTR)s;

    銆銆瀹冩妸 CString 寮哄埗綾誨瀷杞寲鎴?LPCTSTR錛屼篃灝辨槸璇村厛鑾峰緱鏀瑰瓧絎︿覆鐨勫湴鍧錛岀劧鍚庡啀寮哄埗綾誨瀷杞寲鎴?LPTSTR錛屼互渚垮彲浠ュ涔嬭繘琛岃祴鍊兼搷浣溿? 娉ㄦ剰榪欏彧鏈夊湪浣跨敤 Set 鎴?Insert 涔嬬被鐨勬柟娉曟墠鏈夋晥錛佸鏋滀綘璇曞浘鑾峰彇鏁版嵁錛屽垯涓嶈兘榪欎箞鍋氥?br> 銆銆濡傛灉浣犳墦綆楄幏鍙栧瓨鍌ㄥ湪鎺т歡涓殑鏁版嵁錛屽垯鏂規硶紼嶆湁涓嶅悓錛屼緥濡傦紝瀵規煇涓?CTreeCtrl 浣跨敤 GetItem 鏂規硶錛屾垜鎯寵幏鍙栭」鐩殑鏂囨湰銆傛垜鐭ラ亾榪欎簺 鏂囨湰鐨勯暱搴︿笉浼氳秴榪?MY_LIMIT錛屽洜姝ゆ垜鍙互榪欐牱鍐欙細

    TVITEM tvi;
    // ... assorted initialization of other fields of tvi
    tvi.pszText = s.GetBuffer(MY_LIMIT);
    tvi.cchTextMax = MY_LIMIT;
    c_MyTree.GetItem(&tvi);
    s.ReleaseBuffer();

    銆銆鍙互鐪嬪嚭鏉ワ紝鍏跺疄涓婇潰鐨勪唬鐮佸鎵鏈夌被鍨嬬殑 Set 鏂規硶閮介傜敤錛屼絾鏄茍涓嶉渶瑕佽繖涔堝仛錛屽洜涓烘墍鏈夌殑綾?Set 鏂規硶錛堝寘鎷? Insert鏂規硶錛変笉浼氭敼鍙樺瓧絎︿覆鐨勫唴瀹廣備絾鏄綋浣犻渶瑕佸啓 CString 瀵硅薄鏃訛紝蹇呴』淇濊瘉緙撳啿鏄彲鍐欑殑錛岃繖姝f槸 GetBuffer 鎵鍋氱殑浜嬫儏銆傚啀嬈″己璋冿細 涓鏃﹀仛浜嗕竴嬈?GetBuffer 璋冪敤錛岄偅涔堝湪璋冪敤 ReleaseBuffer 涔嬪墠涓嶈瀵硅繖涓?CString 瀵硅薄鍋氫換浣曟搷浣溿?br>
    5銆?b> 6銆?b>

    銆銆瀵逛簬鍗曚釜鐨?BSTR 涓叉潵璇達紝榪欑鐢ㄦ硶鍙互宸ヤ綔寰楀緢濂斤紝榪欐槸鍥犱負 CString 鏈変竴涓壒孌婄殑鏋勯犲嚱鏁頒互LPCWSTR錛圔STR姝f槸榪欑綾誨瀷錛? 涓哄弬鏁幫紝騫跺皢瀹冭漿鍖栨垚 ANSI 綾誨瀷銆備笓闂ㄦ鏌ユ槸蹇呴』鐨勶紝鍥犱負 BSTR 鍙兘涓虹┖鍊鹼紝鑰?CString 鐨勬瀯閫犲嚱鏁板浜?NULL 鍊兼儏鍐佃冭檻鐨勪笉鏄緢鍛ㄥ埌錛岋紙鎰熻阿 Brian Ross 鎸囧嚭榪欎竴鐐?錛夈傝繖縐嶇敤娉曚篃鍙兘澶勭悊鍖呭惈 NUL 緇堢粨瀛楃鐨勫崟瀛楃涓詫紱濡傛灉瑕佽漿鍖栧惈鏈夊涓?NULL 瀛楃 涓詫紝浣犲緱棰濆鍋氫竴浜涘伐浣滄墠琛屻傚湪 CString 涓唴宓岀殑 NULL 瀛楃閫氬父琛ㄧ幇涓嶅敖濡備漢鎰忥紝搴旇灝介噺閬垮厤銆?br> 銆銆鏍規嵁 C/C++ 瑙勫垯錛屽鏋滀綘鏈変竴涓?LPWSTR錛岄偅涔堝畠鍒棤閫夋嫨錛屽彧鑳藉拰 LPCWSTR 鍙傛暟鍖歸厤銆?br>
    鍦?Unicode 妯″紡涓嬶紝瀹冪殑鏋勯犲嚱鏁版槸錛?/p>

    CString::CString(LPCTSTR);

    姝e涓婇潰鎵琛ㄧず鐨勶紝鍦?ANSI 妯″紡涓嬶紝瀹冩湁涓涓壒孌婄殑鏋勯犲嚱鏁幫細

    CString::CString(LPCWSTR); 

    銆銆瀹冧細璋冪敤涓涓唴閮ㄧ殑鍑芥暟灝?Unicode 瀛楃涓茶漿鎹㈡垚 ANSI 瀛楃涓層傦紙鍦║nicode妯″紡涓嬶紝鏈変竴涓笓闂ㄧ殑鏋勯犲嚱鏁幫紝璇ュ嚱鏁版湁涓涓弬鏁版槸LPCSTR綾誨瀷鈥斺斾竴涓?浣?ANSI 瀛楃涓? 鎸囬拡錛岃鍑芥暟灝嗗畠鍔犲涓?Unicode 鐨勫瓧絎︿覆錛侊級鍐嶆寮鴻皟錛氫竴瀹氳媯鏌?BSTR 鐨勫兼槸鍚︿負 NULL銆?br> 銆銆鍙﹀榪樻湁涓涓棶棰橈紝姝e涓婃枃鎻愬埌鐨勶細BSTRs鍙互鍚湁澶氫釜鍐呭祵鐨凬ULL瀛楃錛屼絾鏄?CString 鐨勬瀯閫犲嚱鏁板彧鑳藉鐞嗘煇涓覆涓崟涓?NULL 瀛楃銆? 涔熷氨鏄錛屽鏋滀覆涓惈鏈夊祵鍏ョ殑 NUL瀛楄妭錛孋String 灝嗕細璁$畻鍑洪敊璇殑涓查暱搴︺備綘蹇呴』鑷繁澶勭悊瀹冦傚鏋滀綘鐪嬬湅 strcore.cpp 涓殑鏋勯犲嚱鏁幫紝浣犱細鍙戠幇 瀹冧滑閮借皟鐢ㄤ簡lstrlen錛屼篃灝辨槸璁$畻瀛楃涓茬殑闀垮害銆?br> 銆銆娉ㄦ剰浠?Unicode 鍒?ANSI 鐨勮漿鎹嬌鐢ㄥ甫涓撻棬鍙傛暟鐨?::WideCharToMultiByte錛屽鏋滀綘涓嶆兂浣跨敤榪欑榛樿鐨勮漿鎹㈡柟寮忥紝鍒欏繀欏葷紪鍐欒嚜宸辯殑杞寲浠g爜銆?br> 銆銆濡傛灉浣犲湪 UNICODE 妯″紡涓嬬紪璇戜唬鐮侊紝浣犲彲浠ョ畝鍗曞湴鍐欐垚錛?br>

    CString convert(BSTR b)
    {
        if(b == NULL)
            return CString(_T(""));
        CString s(b); // in UNICODE mode
        return s;
    }
    
    銆銆濡傛灉鏄?ANSI 妯″紡錛屽垯闇瑕佹洿澶嶆潅鐨勮繃紼嬫潵杞崲銆傛敞鎰忚繖涓唬鐮佷嬌鐢ㄤ笌 ::WideCharToMultiByte 鐩稿悓鐨勫弬鏁板箋傛墍浠ヤ綘 鍙兘鍦ㄦ兂瑕佹敼鍙樿繖浜涘弬鏁拌繘琛岃漿鎹㈡椂浣跨敤璇ユ妧鏈備緥濡傦紝鎸囧畾涓嶅悓鐨勯粯璁ゅ瓧絎︼紝涓嶅悓鐨勬爣蹇楅泦絳夈?
    CString convert(BSTR b)
    {
        CString s;
        if(b == NULL)
           return s; // empty for NULL BSTR
    #ifdef UNICODE
        s = b;
    #else
        LPSTR p = s.GetBuffer(SysStringLen(b) + 1); 
        ::WideCharToMultiByte(CP_ACP,            // ANSI Code Page
                              0,                 // no flags
                              b,                 // source widechar string
                              -1,                // assume NUL-terminated
                              p,                 // target buffer
                              SysStringLen(b)+1, // target buffer length
                              NULL,              // use system default char
                              NULL);             // don''t care if default used
        s.ReleaseBuffer();
    #endif
        return s;
    }
    
    銆銆鎴戝茍涓嶆媴蹇冨鏋?BSTR 鍖呭惈娌℃湁鏄犲皠鍒?8 浣嶅瓧絎﹂泦鐨?Unicode 瀛楃鏃朵細鍙戠敓浠涔堬紝鍥犱負鎴戞寚瀹氫簡::WideCharToMultiByte 鐨勬渶鍚庝袱涓弬鏁頒負 NULL銆傝繖灝辨槸浣犲彲鑳介渶瑕佹敼鍙樼殑鍦版柟銆?

    7銆?b>
    lVal); return s; case VT_I4 | VT_BYREF: s.Format(_T("%d"), *va->plVal); case VT_R8: s.Format(_T("%f"), va->dblVal); return s; ... 鍓╀笅鐨勭被鍨嬭漿鎹㈢敱璇昏呰嚜宸卞畬鎴? default: ASSERT(FALSE); // unknown VARIANT type (this ASSERT is optional) return CString(""); } /* vt */ }
    8銆?b>杞藉叆瀛楃涓茶〃璧勬簮


    銆銆濡傛灉浣犳兂鍒涘緩涓涓鏄撹繘琛岃璦鐗堟湰縐繪鐨勫簲鐢ㄧ▼搴忥紝浣犲氨涓嶈兘鍦ㄤ綘鐨勬簮浠g爜涓洿鎺ュ寘鍚湰鍦熻璦瀛楃涓? 錛堜笅闈㈣繖浜涗緥瀛愭垜鐢ㄧ殑璇█閮芥槸鑻辮錛屽洜涓烘垜鐨勬湰鍦熻鏄嫳璇級錛屾瘮濡備笅闈㈣繖縐嶅啓娉曞氨寰堢碂錛?pre>CString s = "There is an error";

    銆銆浣犲簲璇ユ妸浣犳墍鏈夌壒瀹氳璦鐨勫瓧絎︿覆鍗曠嫭鎽嗘斁錛堣皟璇曚俊鎭佸湪鍙戝竷鐗堟湰涓笉鍑虹幇鐨勪俊鎭櫎澶栵級銆傝繖鎰忓懗鐫鍚戜笅闈㈣繖鏍峰啓姣旇緝濂斤細

    s.Format(_T("%d - %s"), code, text);

    銆銆鍦ㄤ綘鐨勭▼搴忎腑錛屾枃瀛楀瓧絎︿覆涓嶆槸璇█鏁忔劅鐨勩備笉綆℃庢牱錛屼綘蹇呴』寰堝皬蹇冿紝涓嶈浣跨敤涓嬮潰榪欐牱鐨勪覆錛?/p>

    // fmt is "Error in %s file %s"
    // readorwrite is "reading" or "writing"
    s.Format(fmt, readorwrite, filename); 

    銆銆榪欐槸鎴戠殑鍒囪韓浣撲細銆傚湪鎴戠殑絎竴涓浗闄呭寲鐨勫簲鐢ㄧ▼搴忎腑鎴戠姱浜嗚繖涓敊璇紝灝界鎴戞噦寰瘋錛岀煡閬撳湪寰瘋鐨勮娉曚腑鍔ㄨ瘝鏀懼湪鍙ュ瓙鐨勬渶鍚庨潰錛屾垜浠殑寰峰浗鏂歸潰鐨勫彂琛屼漢榪樻槸鑻﹁嫤鐨勬姳鎬ㄤ粬浠笉寰椾笉鎻愬彇閭d簺涓嶅彲鎬濊鐨勫痙璇敊璇彁紺轟俊鎭劧鍚庨噸鏂版牸寮忓寲浠ヨ瀹冧滑鑳芥甯稿伐浣溿傛瘮杈冨ソ鐨勫姙娉曪紙涔熸槸鎴戠幇鍦ㄤ嬌鐢ㄧ殑鍔炴硶錛夋槸浣跨敤涓や釜瀛楃涓詫紝涓涓敤 浜庤錛屼竴涓敤浜庡啓錛屽湪浣跨敤鏃跺姞杞藉悎閫傜殑鐗堟湰錛屼嬌寰楀畠浠瀛楃涓插弬鏁版槸闈炴晱鎰熺殑銆備篃灝辨槸璇村姞杞芥暣涓牸寮忥紝鑰屼笉鏄姞杞戒覆“reading”錛?#8220;writing”錛?/p>

    // fmt is "Error in reading file %s"
    // "Error in writing file %s"
    s.Format(fmt, filename);

    銆銆涓瀹氳娉ㄦ剰錛屽鏋滀綘鏈夊ソ鍑犱釜鍦版柟闇瑕佹浛鎹紝浣犱竴瀹氳淇濊瘉鏇挎崲鍚庡彞瀛愮殑緇撴瀯涓嶄細鍑虹幇闂錛屾瘮濡傚湪鑻辮涓紝鍙互鏄富璇?瀹捐錛屼富璇?璋撹錛屽姩璇?瀹捐鐨勭粨鏋勭瓑絳夈?br> 銆銆鍦ㄨ繖閲岋紝鎴戜滑騫朵笉璁ㄨ FormatMessage錛屽叾瀹炲畠姣?sprintf/Format 榪樿鏈変紭鍔匡紝浣嗘槸涓嶅お瀹規槗鍜孋String 緇撳悎浣跨敤銆傝В鍐寵繖縐嶉棶棰樼殑鍔炴硶灝辨槸鎴戜滑鎸夌収鍙傛暟鍑虹幇鍦ㄥ弬鏁拌〃涓殑浣嶇疆緇欏弬鏁板彇鍚嶅瓧錛岃繖鏍峰湪浣犺緭鍑虹殑鏃跺欏氨涓嶄細鎶婁粬浠殑浣嶇疆鎺掗敊浜嗐?br> 銆銆鎺ヤ笅鏉ユ垜浠璁烘垜浠繖浜涚嫭绔嬬殑瀛楃涓叉斁鍦ㄤ粈涔堝湴鏂廣傛垜浠彲浠ユ妸瀛楃涓茬殑鍊兼斁鍏ヨ祫婧愭枃浠朵腑鐨勪竴涓О涓?STRINGTABLE 鐨勬涓傝繃紼嬪涓嬶細棣栧厛浣跨敤 Visual Studio 鐨勮祫婧愮紪杈戝櫒鍒涘緩涓涓瓧絎︿覆錛岀劧鍚庣粰姣忎竴涓瓧絎︿覆鍙栦竴涓狪D錛屼竴鑸垜浠粰瀹冨彇鍚嶅瓧閮戒互 IDS_寮澶淬傛墍浠ュ鏋滀綘鏈変竴涓俊鎭紝浣犲彲浠ュ垱寤轟竴涓瓧絎︿覆璧勬簮鐒跺悗鍙栧悕涓?IDS_READING_FILE錛屽彟澶栦竴涓氨鍙栧悕涓?IDS_WRITING_FILE銆傚畠浠互涓嬮潰鐨勫艦寮忓嚭鐜板湪浣犵殑 .rc 鏂囦歡涓細

    STRINGTABLE
    IDS_READING_FILE "Reading file %s"
    IDS_WRITING_FILE "Writing file %s"
    END

    娉ㄦ剰錛?/b>榪欎簺璧勬簮閮戒互 Unicode 鐨勬牸寮忎繚瀛橈紝涓嶇浣犳槸鍦ㄤ粈涔堢幆澧冧笅緙栬瘧銆備粬浠湪Win9x緋葷粺涓婁篃鏄互Unicode 鐨勫艦寮忓瓨鍦紝铏界劧 Win9x 涓嶈兘鐪熸澶勭悊 Unicode銆?br> 鐒跺悗浣犲彲浠ヨ繖鏍蜂嬌鐢ㄨ繖浜涜祫婧愶細
    // 鍦ㄤ嬌鐢ㄨ祫婧愪覆琛ㄤ箣鍓嶏紝紼嬪簭鏄繖鏍峰啓鐨勶細

       CString fmt;
          if(...)
            fmt = "Reading file %s";
         else
           fmt = "Writing file %s";
      ...
        // much later
      CString s;
      s.Format(fmt, filename); 
    
    // 浣跨敤璧勬簮涓茶〃涔嬪悗錛岀▼搴忚繖鏍峰啓錛?
        CString fmt;
            if(...)
               fmt.LoadString(IDS_READING_FILE);
            else
               fmt.LoadString(DS_WRITING_FILE);
        ...
          // much later
        CString s;
        s.Format(fmt, filename);
    
    銆銆鐜板湪錛屼綘鐨勪唬鐮佸彲浠ョЩ妞嶅埌浠諱綍璇█涓幓銆侺oadString 鏂規硶闇瑕佷竴涓瓧絎︿覆璧勬簮鐨?ID 浣滀負鍙傛暟錛岀劧鍚庡畠浠?STRINGTABLE 涓彇鍑哄畠瀵瑰簲鐨勫瓧絎︿覆錛岃祴鍊肩粰 CString 瀵硅薄銆? CString 瀵硅薄鐨勬瀯閫犲嚱鏁拌繕鏈変竴涓洿鍔犺仾鏄庣殑鐗瑰緛鍙互綆鍖?STRINGTABLE 鐨勪嬌鐢ㄣ傝繖涓敤娉曞湪 CString::CString 鐨勬枃妗d腑娌℃湁鎸囧嚭錛屼絾鏄湪 鏋勯犲嚱鏁扮殑紺轟緥紼嬪簭涓嬌鐢ㄤ簡銆傦紙涓轟粈涔堣繖涓壒鎬ф病鏈夋垚涓烘寮忔枃妗g殑涓閮ㄥ垎錛岃屾槸鏀懼湪浜嗕竴涓緥瀛愪腑錛屾垜璁頒笉寰椾簡錛侊級鈥斺斻?b>璇戣呮敞
    錛氫粠榪欏彞璇濈湅錛屼綔鑰呭彲鑳芥槸CString鐨勮璁¤呫傚叾瀹炲墠闈㈣繕鏈変竴鍙ョ被浼肩殑璇濄傝浠栨病鏈夊浣跨敤GetBuffer(0)鑾峰緱鐨勬寚閽堟寚鍚戠殑鍦板潃鏄惁鍙鍋氭湁鏁堟ф鏌? 銆戙傝繖涓壒寰佸氨鏄細濡傛灉浣犲皢涓涓瓧絎︿覆璧勬簮鐨処D寮哄埗綾誨瀷杞崲涓?LPCTSTR錛屽皢浼氶殣鍚皟鐢?LoadString銆傚洜姝わ紝涓嬮潰涓や釜鏋勯犲瓧絎︿覆鐨勪緥瀛愬叿鏈夌浉鍚岀殑鏁堟灉錛岃屼笖鍏?ASSERT 鍦╠ebug妯″紡涓嬩笉浼氳瑙﹀彂錛?pre>CString s; s.LoadString(IDS_WHATEVER); CString t( (LPCTSTR)IDS_WHATEVER ); ASSERT(s == t);//涓嶄細琚Е鍙戯紝璇存槑s鍜宼鏄浉鍚岀殑銆?/pre>

    銆銆鐜板湪錛屼綘鍙兘浼氭兂錛氳繖鎬庝箞鍙兘宸ヤ綔鍛紵鎴戜滑鎬庝箞鑳芥妸 STRINGTABLE ID 杞寲鎴愪竴涓寚閽堝憿錛熷緢綆鍗曪細鎵鏈夌殑瀛楃涓?ID 閮藉湪1~65535榪欎釜鑼冨洿鍐咃紝涔熷氨鏄錛屽畠鎵鏈夌殑楂樹綅閮芥槸0錛岃屾垜浠湪紼嬪簭涓墍浣跨敤鐨勬寚閽堟槸涓嶅彲鑳藉皬浜?5535鐨勶紝鍥犱負紼嬪簭鐨勪綆 64K 鍐呭瓨姘歌繙涔熶笉鍙兘瀛樺湪鐨勶紝濡傛灉浣犺瘯鍥捐闂?x00000000鍒?x0000FFFF涔嬮棿鐨勫唴瀛橈紝灝嗕細寮曞彂涓涓唴瀛樿秺鐣岄敊璇傛墍浠ヨ1~65535鐨勫間笉鍙兘鏄竴涓唴瀛樺湴鍧錛屾墍浠ユ垜浠彲浠ョ敤榪欎簺鍊兼潵浣滀負瀛楃涓茶祫婧愮殑ID銆?br> 銆銆鎴戝懼悜浜庝嬌鐢?MAKEINTRESOURCE 瀹忔樉寮忓湴鍋氳繖縐嶈漿鎹€傛垜璁や負榪欐牱鍙互璁╀唬鐮佹洿鍔犳槗浜庨槄璇匯傝繖鏄釜鍙傚悎鍦?MFC 涓嬌鐢ㄧ殑鏍囧噯瀹忋備綘瑕佽浣忥紝澶у鏁扮殑鏂規硶鍗沖彲浠ユ帴鍙椾竴涓?UINT 鍨嬬殑鍙傛暟錛屼篃鍙互鎺ュ彈涓涓?LPCTSTR 鍨嬬殑鍙傛暟錛岃繖鏄緷璧?C++ 鐨勯噸杞藉姛鑳藉仛鍒扮殑銆侰++閲嶈澆鍑芥暟甯︽潵鐨? 寮婄灝辨槸閫犳垚鎵鏈夌殑寮哄埗綾誨瀷杞寲閮介渶瑕佹樉紺哄0鏄庛傚悓鏍鳳紝浣犱篃鍙互緇欏緢澶氱緇撴瀯鍙紶閫掍竴涓祫婧愬悕銆?/p>

    CString s;
    s.LoadString(IDS_WHATEVER);
    CString t( MAKEINTRESOURCE(IDS_WHATEVER));
    ASSERT(s == t);

    銆銆鍛婅瘔浣犲惂錛氭垜涓嶄粎鍙槸鍦ㄨ繖閲岄紦鍚癸紝浜嬪疄涓婃垜涔熸槸榪欎箞鍋氱殑銆傚湪鎴戠殑浠g爜涓紝浣犲嚑涔庝笉鍙兘鎵懼埌涓涓瓧絎︿覆錛屽綋鐒訛紝閭d簺鍙槸鍋剁劧鍦ㄨ皟璇曚腑鍑虹幇鐨勬垨鑰呭拰璇█鏃犲叧鐨勫瓧絎︿覆闄ゅ銆?br>
    9銆?b>

    char* szName = GetName().GetBuffer(20);
    RegSetValueEx(hKey, "Name", 0, REG_SZ, 
                 (CONST BYTE *) szName,
                 strlen (szName + 1));

    榪欎釜 Name 瀛楃涓茬殑闀垮害灝忎簬 20錛屾墍浠ユ垜涓嶈涓烘槸 GetBuffer 鐨勫弬鏁扮殑闂銆?br>
    鐪熻浜哄洶鎯戯紝璇峰府甯垜銆?br>
    浜茬埍鐨?Frustrated錛?br>
    浣犵姱浜嗕竴涓浉褰撳井濡欑殑閿欒錛岃仾鏄庡弽琚仾鏄庤錛屾紜殑浠g爜搴旇璞′笅闈㈣繖鏍鳳細

    CString Name = GetName();
    RegSetValueEx(hKey, _T("Name"), 0, REG_SZ, 
                        (CONST BYTE *) (LPCTSTR)Name,
                        (Name.GetLength() + 1) * sizeof(TCHAR));
    
    銆銆涓轟粈涔堟垜鍐欑殑浠g爜鑳借鑰屼綘鍐欑殑灝辨湁闂鍛紵涓昏鏄洜涓哄綋浣犺皟鐢?GetName 鏃惰繑鍥炵殑 CString 瀵硅薄鏄竴涓復鏃跺璞°傚弬瑙侊細銆奀++ Reference manual銆?#167;12.2
    銆銆鍦ㄤ竴浜涚幆澧冧腑錛岀紪璇戝櫒鏈夊繀瑕佸垱寤轟竴涓復鏃跺璞★紝榪欐牱寮曞叆涓存椂瀵硅薄鏄緷璧栦簬瀹炵幇鐨勩傚鏋滅紪璇戝櫒寮曞叆鐨勮繖涓復鏃跺璞℃墍灞炵殑綾繪湁鏋勯犲嚱鏁扮殑璇濓紝緙栬瘧鍣ㄨ紜繚榪欎釜綾葷殑鏋勯犲嚱鏁拌璋冪敤銆傚悓鏍風殑錛屽鏋滆繖涓被澹版槑鏈夋瀽鏋勫嚱鏁扮殑璇濓紝涔熻淇濊瘉榪欎釜涓存椂瀵硅薄鐨勬瀽鏋勫嚱鏁拌璋冪敤銆?br> 銆銆緙栬瘧鍣ㄥ繀欏諱繚璇佽繖涓復鏃跺璞¤閿姣佷簡銆傝閿姣佺殑紜垏鍦扮偣渚濊禆浜庡疄鐜?....榪欎釜鏋愭瀯鍑芥暟蹇呴』鍦ㄩ鍑哄垱寤鴻涓存椂瀵硅薄鐨勮寖鍥翠箣鍓嶈璋冪敤銆?br> 銆銆澶ч儴鍒嗙殑緙栬瘧鍣ㄦ槸榪欐牱璁捐鐨勶細鍦ㄤ復鏃跺璞¤鍒涘緩鐨勪唬鐮佺殑涓嬩竴涓墽琛屾楠ゅ闅愬惈璋冪敤榪欎釜涓存椂瀵硅薄鐨勬瀽鏋勫嚱鏁幫紝瀹炵幇璧鋒潵錛屼竴鑸兘鏄湪涓嬩竴涓垎鍙峰銆傚洜姝わ紝榪欎釜 CString 瀵硅薄鍦?GetBuffer 璋冪敤涔嬪悗灝辮鏋愭瀯浜嗭紙欏轟究鎻愪竴鍙ワ紝浣犳病鏈夌悊鐢辯粰 GetBuffer 鍑芥暟浼犻掍竴涓弬鏁幫紝鑰屼笖娌℃湁浣跨敤ReleaseBuffer 涔熸槸涓嶅鐨勶級銆傛墍浠?GetBuffer 鏈潵榪斿洖鐨勬槸鎸囧悜榪欎釜涓存椂瀵硅薄涓瓧絎︿覆鐨勫湴鍧鐨勬寚閽堬紝浣嗘槸褰撹繖涓復鏃跺璞¤鏋愭瀯鍚庯紝榪欏潡鍐呭瓨灝辮閲婃斁浜嗐傜劧鍚?MFC 鐨勮皟璇曞唴瀛樺垎閰嶅櫒浼氶噸鏂頒負榪欏潡鍐呭瓨鍏ㄩ儴濉笂 0xDD錛屾樉紺哄嚭鏉ュ垰濂藉氨鏄?#8220;Ý”絎﹀彿銆傚湪榪欎釜鏃跺欎綘鍚戞敞鍐岃〃涓啓鏁版嵁錛屽瓧絎︿覆鐨勫唴瀹瑰綋鐒跺叏琚牬鍧忎簡銆?br> 銆銆鎴戜滑涓嶅簲璇ョ珛鍗蟲妸榪欎釜涓存椂瀵硅薄杞寲鎴?char* 綾誨瀷錛屽簲璇ュ厛鎶婂畠淇濆瓨鍒頒竴涓?CString 瀵硅薄涓紝榪欐剰鍛崇潃鎶婁復鏃跺璞″鍒朵簡涓浠斤紝鎵浠ュ綋涓存椂鐨?CString 瀵硅薄琚瀽鏋勪簡涔嬪悗錛岃繖涓?CString 瀵硅薄涓殑鍊間緷鐒朵繚瀛樼潃銆傝繖涓椂鍊欏啀鍚戞敞鍐岃〃涓啓鏁版嵁灝辨病鏈夐棶棰樹簡銆?br> 銆銆姝ゅ錛屾垜鐨勪唬鐮佹槸鍏鋒湁 Unicode 鎰忚瘑鐨勩傞偅涓搷浣滄敞鍐岃〃鐨勫嚱鏁伴渶瑕佷竴涓瓧鑺傚ぇ灝忥紝浣跨敤lstrlen(Name+1) 寰楀埌鐨勫疄闄呯粨鏋滃浜?Unicode 瀛楃鏉ヨ姣?ANSI 瀛楃瑕佸皬涓鍗婏紝鑰屼笖瀹冧篃涓嶈兘浠庤繖涓瓧絎︿覆鐨勭浜屼釜瀛楃璧峰紑濮嬭綆楋紝涔熻浣犵殑鏈剰鏄?lstrlen(Name) + 1錛圤K錛屾垜鎵胯錛屾垜涔熺姱浜嗗悓鏍風殑閿欒錛侊級銆備笉璁哄浣曪紝鍦?Unicode 妯″紡涓嬶紝鎵鏈夌殑瀛楃閮芥槸2涓瓧鑺傚ぇ灝忥紝鎴戜滑闇瑕佸鐞嗚繖涓棶棰樸傚井杞殑鏂囨。浠や漢鎯婅鍦板姝や繚鎸佺紕榛橈細REG_SZ 鐨勫肩┒绔熸槸浠ュ瓧鑺傝綆楄繕鏄互瀛楃璁$畻鍛紵鎴戜滑鍋囪瀹冩寚鐨勬槸浠ュ瓧鑺備負鍗曚綅璁$畻錛屼綘闇瑕佸浣犵殑浠g爜鍋氫竴浜涗慨鏀規潵璁$畻榪欎釜瀛楃涓叉墍鍚湁鐨勫瓧鑺傚ぇ灝忋?br>
    10銆?b>

    姣旇搗涓嬮潰鐨勪唬鐮佹潵錛屾晥鐜囪浣庡浜嗭細

    char s[1024];
    lstrcpy(s, SomeString1);
    lstrcat(s, SomeString2);
    lstrcat(s, SomeString 3);
    lstrcat(s, ",");
    lstrcat(s, SomeString4);

    銆銆鎬諱箣錛屼綘鍙兘浼氭兂錛岄鍏堬紝瀹冧負 SomeCString1 鍒嗛厤涓鍧楀唴瀛橈紝鐒跺悗鎶?SomeCString1 澶嶅埗鍒伴噷闈紝鐒跺悗鍙戠幇瀹冭鍋氫竴涓繛鎺ワ紝鍒欓噸鏂板垎閰嶄竴鍧楁柊鐨勮凍澶熷ぇ鐨勫唴瀛橈紝澶у埌鑳藉鏀句笅褰撳墠鐨勫瓧絎︿覆鍔犱笂SomeCString2錛屾妸鍐呭澶嶅埗鍒拌繖鍧楀唴瀛? 錛岀劧鍚庢妸 SomeCString2 榪炴帴鍒板悗闈紝鐒跺悗閲婃斁絎竴鍧楀唴瀛橈紝騫舵妸鎸囬拡閲嶆柊鎸囧悜鏂板唴瀛樸傜劧鍚庝負姣忎釜瀛楃涓查噸澶嶈繖涓繃紼嬨傛妸榪?4 涓瓧絎︿覆榪炴帴璧鋒潵鏁堢巼澶氫綆鍟娿備簨瀹炰笂錛屽湪寰堝鎯呭喌涓嬫牴鏈氨涓嶉渶瑕佸鍒舵簮瀛楃涓詫紙鍦?+= 鎿嶄綔絎﹀乏杈圭殑瀛楃涓詫級銆?br> 銆銆鍦?VC++6.0 涓紝Release 妯″紡涓嬶紝鎵鏈夌殑 CString 涓殑緙撳瓨閮芥槸鎸夐瀹氫箟閲忓瓙鍒嗛厤鐨勩傛墍璋撻噺瀛愶紝鍗崇‘瀹氫負 64銆?28銆?56 鎴栬?512 瀛楄妭銆傝繖鎰忓懗鐫闄ら潪瀛楃涓查潪甯擱暱錛岃繛鎺ュ瓧絎︿覆鐨勬搷浣滃疄闄呬笂灝辨槸 strcat 緇忚繃浼樺寲鍚庣殑鐗堟湰錛堝洜涓哄畠鐭ラ亾鏈湴鐨勫瓧絎︿覆搴旇鍦ㄤ粈涔堝湴鏂圭粨鏉燂紝鎵浠ヤ笉闇瑕佸鎵懼瓧絎︿覆鐨勭粨灝撅紱鍙渶瑕佹妸鍐呭瓨涓殑鏁版嵁鎷瘋礉鍒版寚瀹氱殑鍦版柟鍗沖彲錛夊姞涓婇噸鏂拌綆楀瓧絎︿覆鐨勯暱搴︺傛墍浠ュ畠鐨勬墽琛屾晥鐜囧拰綰?C 鐨勪唬鐮佹槸涓鏍風殑錛屼絾鏄畠鏇村鏄撳啓銆佹洿瀹規槗緇存姢鍜屾洿瀹規槗鐞嗚В銆?br> 銆銆濡傛灉浣犺繕鏄笉鑳界‘瀹氱┒绔熷彂鐢熶簡鎬庢牱鐨勮繃紼嬶紝璇風湅鐪?CString 鐨勬簮浠g爜錛宻trcore.cpp錛屽湪浣?vc98鐨勫畨瑁呯洰褰曠殑 mfc\src 瀛愮洰褰曚腑銆傜湅鐪?ConcatInPlace 鏂規硶錛屽畠琚湪鎵鏈夌殑 += 鎿嶄綔絎︿腑璋冪敤銆?br>
    鍟婂搱錛侀毦閬?CString 鐪熺殑榪欎箞"楂樻晥"鍚楋紵姣斿錛屽鏋滄垜鍒涘緩

    CString cat("Mew!");

    銆銆鐒跺悗鎴戝茍涓嶆槸寰楀埌浜嗕竴涓珮鏁堢殑銆佺簿綆鐨?涓瓧鑺傚ぇ灝忕殑緙撳啿鍖猴紙4涓瓧絎﹀姞涓涓粨鏉熷瓧絎︼級錛岀郴緇熷皢緇欐垜鍒嗛厤64涓瓧鑺傦紝鑰屽叾涓?9涓瓧鑺傞兘琚氮璐逛簡銆?br> 銆銆濡傛灉浣犱篃鏄繖涔堟兂鐨勮瘽錛岄偅涔堝氨璇峰噯澶囧ソ鎺ュ彈鍐嶆暀鑲插惂銆傚彲鑳藉湪鏌愪釜鍦版柟鏌愪釜浜虹粰浣犺榪囧敖閲忎嬌鐢ㄥ皯鐨勭┖闂存槸浠跺ソ浜嬫儏銆備笉閿欙紝榪欑璇存硶鐨勭‘姝g‘錛屼絾鏄粬蹇界暐浜嗕簨瀹炰腑涓涓緢閲嶈鐨勬柟闈€?br> 銆銆濡傛灉浣犵紪鍐欑殑鏄繍琛屽湪16K EPROMs涓嬬殑宓屽叆寮忕▼搴忕殑璇濓紝浣犳湁鐞嗙敱灝介噺灝戜嬌鐢ㄧ┖闂達紝鍦ㄨ繖縐嶇幆澧冧笅錛屽畠鑳戒嬌浣犵殑紼嬪簭鏇村仴澹備絾鏄湪 500MHz, 256MB鐨勬満鍣ㄤ笂鍐?Windows 紼嬪簭錛屽鏋滀綘榪樻槸榪欎箞鍋氾紝瀹冨彧浼氭瘮浣犺涓虹殑“浣庢晥”鐨勪唬鐮佽繍琛屽緱鏇寸碂銆?br> 銆銆涓句緥鏉ヨ銆傚瓧絎︿覆鐨勫ぇ灝忚璁や負鏄獎鍝嶆晥鐜囩殑棣栬鍥犵礌錛屼嬌瀛楃涓插敖鍙兘灝忓彲浠ユ彁楂樻晥鐜囷紝鍙嶄箣鍒欓檷浣庢晥鐜囷紝榪欐槸澶у涓璐殑鎯蟲硶銆備絾鏄繖縐嶆兂娉曟槸涓嶅鐨勶紝綺劇‘鐨勫唴瀛樺垎閰嶇殑鍚庢灉瑕佸湪紼嬪簭榪愯浜嗗ソ鍑犱釜灝忔椂鍚庢墠鑳戒綋鐜板緱鍑烘潵錛岄偅鏃訛紝紼嬪簭鐨勫爢涓皢鍏呮弧灝忕墖鐨勫唴瀛橈紝瀹冧滑澶皬浠ヨ嚦浜庝笉鑳界敤鏉ュ仛浠諱綍浜嬶紝浣嗘槸浠栦滑澧炲姞浜嗕綘紼嬪簭鐨勫唴瀛樼敤閲忥紝澧炲姞浜嗗唴瀛橀〉闈氦鎹㈢殑嬈℃暟錛屽綋欏甸潰浜ゆ崲鐨勬鏁板鍔犲埌緋葷粺鑳藉蹇嶅彈鐨勪笂闄愶紝緋葷粺鍒欎細涓轟綘鐨勭▼搴忓垎閰嶆洿澶氱殑欏甸潰錛岀洿鍒頒綘鐨勭▼搴忓崰鐢ㄤ簡鎵鏈夌殑鍙敤鍐呭瓨銆傜敱姝ゅ彲瑙侊紝铏界劧鍐呭瓨紕庣墖鏄喅瀹氭晥鐜囩殑嬈¤鍥犵礌錛屼絾姝f槸榪欎簺鍥犵礌瀹為檯鎺у埗浜嗙郴緇熺殑琛屼負錛屾渶緇堬紝瀹冩崯瀹充簡緋葷粺鐨勫彲闈犳э紝榪欐槸浠や漢鏃犳硶鎺ュ彈鐨勩?br> 銆銆璁頒綇錛屽湪 debug 妯″紡涓嬶紝鍐呭瓨寰寰鏄簿紜垎閰嶇殑錛岃繖鏄負浜嗘洿濂界殑鎺掗敊銆?br> 銆銆鍋囪浣犵殑搴旂敤紼嬪簭閫氬父闇瑕佽繛緇伐浣滃ソ鍑犱釜鏈堛傛瘮濡傦紝鎴戝父鎵撳紑 VC++錛學ord錛孭owerPoint錛孎rontpage錛孫utlook Express錛孎orté Agent錛孖nternet Explorer鍜屽叾瀹冪殑涓浜涚▼搴忥紝鑰屼笖閫氬父涓嶅叧闂畠浠傛垜鏇劇粡澶滀互緇ф棩鍦拌繛緇敤 PowerPoint 宸ヤ綔浜嗗ソ鍑犲ぉ錛堝弽涔嬶紝濡傛灉浣犱笉騫鎬笉寰椾笉浣跨敤鍍?Adobe FrameMaker 榪欐牱鐨勭▼搴忕殑璇濓紝浣犲皢浼氫綋浼氬埌鍙潬鎬х殑閲嶈錛涜繖涓▼搴忔満浼氭瘡澶╅兘瑕佸穿婧?~6嬈★紝姣忔閮芥槸鍥犱負鐢ㄥ畬浜嗘墍鏈夌殑絀洪棿騫跺~婊℃垜鎵鏈夌殑浜ゆ崲欏甸潰錛夈傛墍浠ョ簿紜唴瀛樺垎閰嶆槸涓嶅彲鍙栫殑錛屽畠浼氬嵄鍙婂埌緋葷粺鐨勫彲闈犳э紝騫跺紩璧峰簲鐢ㄧ▼搴忓穿婧冦?br> 銆銆鎸夐噺瀛愮殑鍊嶆暟涓哄瓧絎︿覆鍒嗛厤鍐呭瓨錛屽唴瀛樺垎閰嶅櫒灝卞彲浠ュ洖鏀剁敤榪囩殑鍐呭瓨鍧楋紝閫氬父榪欎簺鍥炴敹鐨勫唴瀛樺潡椹笂灝卞彲浠ヨ鍏跺畠鐨?CString 瀵硅薄閲嶆柊鐢ㄥ埌錛岃繖鏍峰氨鍙互淇濊瘉紕庣墖鏈灝戙傚垎閰嶅櫒鐨勫姛鑳藉姞寮轟簡錛屽簲鐢ㄧ▼搴忕敤鍒扮殑鍐呭瓨灝辮兘灝藉彲鑳戒繚鎸佹渶灝忥紝榪欐牱鐨勭▼搴忓氨鍙互榪愯鍑犱釜鏄熸湡鎴栧嚑涓湀鑰屼笉鍑虹幇闂銆?br> 銆銆棰樺璇濓細寰堝騫翠互鍓嶏紝鎴戜滑鍦?CMU 鍐欎竴涓氦浜掑紡緋葷粺鐨勬椂鍊欙紝涓浜涘鍐呭瓨鍒嗛厤鍣ㄧ殑鐮旂┒鏄劇ず鍑哄畠寰寰浜х敓寰堝鍐呭瓨紕庣墖銆侸im Mitchell錛岀幇鍦ㄤ粬鍦?Sun Microsystems 宸ヤ綔錛岄偅鏃朵警浠栧垱閫犱簡涓縐嶅唴瀛樺垎閰嶅櫒錛屽畠淇濈暀浜嗕竴涓唴瀛樺垎閰嶇姸鍐電殑榪愯鏃剁粺璁¤〃錛岃繖縐嶆妧鏈拰褰撴椂鐨勪富嫻佸垎閰嶅櫒鎵鐢ㄧ殑鎶鏈兘涓嶅悓錛屼笖杈冧負棰嗗厛銆傚綋涓涓唴瀛樺潡闇瑕佽鍒嗗壊寰楁瘮鏌愪竴涓煎皬鐨勮瘽錛屼粬騫朵笉鍒嗗壊瀹冿紝鍥犳鍙互閬垮厤浜х敓澶灝忓埌浠涔堜簨閮藉共涓嶄簡鐨勫唴瀛樼鐗囥備簨瀹炰笂浠栧湪鍐呭瓨鍒嗛厤鍣ㄤ腑浣跨敤浜嗕竴涓誕鍔ㄦ寚閽堬紝浠栬涓猴細涓庡叾璁╂寚浠ゅ仛闀挎椂闂寸殑瀛樺彇鍐呭瓨鎿嶄綔錛岃繕涓嶅綆鍗曠殑蹇界暐閭d簺澶皬鐨勫唴瀛樺潡鑰屽彧鍋氫竴浜涙誕鍔ㄦ寚閽堢殑鎿嶄綔銆傦紙His observation was that the long-term saving in instructions by not having to ignore unusable small storage chunks far and away exceeded the additional cost of doing a few floating point operations on an allocation operation.錛変粬鏄鐨勩?br> 銆銆姘歌繙涓嶈璁や負鎵璋撶殑“鏈浼樺寲”鏄緩绔嬪湪姣忎竴琛屼唬鐮侀兘楂橀熶笖鑺傜渷鍐呭瓨鐨勫熀紜涓婄殑錛屼簨瀹炰笂錛岄珮閫熶笖鑺傜渷鍐呭瓨搴旇鏄湪涓涓簲鐢ㄧ▼搴忕殑鏁翠綋姘村鉤涓婅冭檻鐨勩傚湪杞歡鐨勬暣浣撴按騫充笂錛屽彧浣跨敤鏈灝忓唴瀛樼殑瀛楃涓插垎閰嶇瓥鐣ュ彲鑳芥槸鏈緋熺硶鐨勪竴縐嶆柟娉曘?br> 銆銆濡傛灉浣犺涓轟紭鍖栨槸浣犲湪姣忎竴琛屼唬鐮佷笂鍋氱殑閭d簺鍔姏鐨勮瘽錛屼綘搴旇鎯充竴鎯籌細鍦ㄦ瘡涓琛屼唬鐮佷腑鍋氱殑浼樺寲寰堝皯鑳界湡姝h搗浣滅敤銆備綘鍙互鐪嬫垜鐨勫彟涓綃囧叧浜庝紭鍖栭棶棰樼殑鏂囩珷銆奩our Worst Enemy for some thought-provoking ideas銆嬨?br> 銆銆璁頒綇錛?= 榪愮畻絎﹀彧鏄竴縐嶇壒渚嬶紝濡傛灉浣犲啓鎴愪笅闈㈣繖鏍鳳細

    CString s = SomeCString1 + SomeCString2 + SomeCString3 + "," + SomeCString4;

    鍒欐瘡涓涓?+ 鐨勫簲鐢ㄤ細閫犳垚涓涓柊鐨勫瓧絎︿覆琚垱寤哄拰涓嬈″鍒舵搷浣溿?br>
    鎬葷粨

    銆銆浠ヤ笂鏄嬌鐢?CString 鐨勪竴浜涙妧宸с傛垜姣忓ぉ鍐欑▼搴忕殑鏃跺欓兘浼氱敤鍒拌繖浜涖侰String 騫朵笉鏄竴縐嶅緢闅句嬌鐢ㄧ殑綾伙紝浣嗘槸 MFC 娌℃湁寰堟槑鏄劇殑鎸囧嚭榪欎簺鐗瑰緛錛岄渶瑕佷綘鑷繁鍘繪帰绱€佸幓鍙戠幇銆?br>

    ]]>鍏充簬char, wchar_t, TCHAR, _T(),L,瀹?_T銆乀EXT,_TEXT銆丩http://m.shnenglu.com/brucejini/articles/98682.html璺漢鐢?/dc:creator>璺漢鐢?/author>Thu, 15 Oct 2009 06:16:00 GMThttp://m.shnenglu.com/brucejini/articles/98682.htmlhttp://m.shnenglu.com/brucejini/comments/98682.htmlhttp://m.shnenglu.com/brucejini/articles/98682.html#Feedback0http://m.shnenglu.com/brucejini/comments/commentRss/98682.htmlhttp://m.shnenglu.com/brucejini/services/trackbacks/98682.html 

    char :鍗曞瓧鑺傚彉閲忕被鍨嬶紝鏈澶氳〃紺?56涓瓧絎︼紝

    wchar_t :瀹藉瓧鑺傚彉閲忕被鍨嬶紝鐢ㄤ簬琛ㄧずUnicode瀛楃錛?/p>

    瀹冨疄闄呭畾涔夊湪<string.h>閲岋細typedef unsigned short wchar_t銆?/p>

    涓轟簡璁╃紪璇戝櫒璇嗗埆Unicode瀛楃涓詫紝蹇呴』浠ュ湪鍓嶉潰鍔犱竴涓?#8220;L”,瀹氫箟瀹藉瓧鑺傜被鍨嬫柟娉曞涓嬶細

        wchar_t c = `A' ;
    wchar_t * p = L"Hello!" ;
    wchar_t a[] = L"Hello!" ;

    鍏朵腑錛屽瀛楄妭綾誨瀷姣忎釜鍙橀噺鍗犵敤2涓瓧鑺傦紝鏁呬笂榪版暟緇刟鐨剆izeof(a) = 14

    TCHAR / _T( ) :
    濡傛灉鍦ㄧ▼搴忎腑鏃㈠寘鎷珹NSI鍙堝寘鎷琔nicode緙栫爜錛岄渶瑕佸寘鎷ご鏂囦歡tchar.h銆俆CHAR鏄畾涔夊湪璇ュご鏂囦歡涓殑瀹忥紝瀹冭浣犳槸鍚﹀畾涔変簡_UNICODE瀹忚屽畾涔夋垚錛?
    瀹氫箟浜哶UNICODE錛?nbsp;   typedef wchar_t TCHAR ;
    娌℃湁瀹氫箟_UNICODE錛?typedef char TCHAR ;

    #ifdef UNICODE
    typedef char TCHAR;
    #else
    typede wchar_t TCHAR;
    #endif
    _T( )涔熸槸瀹氫箟鍦ㄨ澶存枃浠朵腑鐨勫畯錛岃鏄惁瀹氫箟浜哶UNICODE瀹忚屽畾涔夋垚錛?
    瀹氫箟浜哶UNICODE錛?nbsp;   #define _T(x) L##x
    娌℃湁瀹氫箟_UNICODE錛?#define _T(x) x
    娉ㄦ剰錛氬鏋滃湪紼嬪簭涓嬌鐢ㄤ簡TCHAR錛岄偅涔堝氨涓嶅簲璇ヤ嬌鐢ˋNSI鐨剆trXXX鍑芥暟鎴栬匲nicode鐨剋csXXX鍑芥暟浜嗭紝鑰屽繀欏諱嬌鐢╰char.h涓畾涔夌殑_tcsXXX鍑芥暟銆?/p>

    浠trcpy鍑芥暟涓轟緥瀛愶紝鎬葷粨涓涓嬶細
     

    //濡傛灉浣犳兂浣跨敤ANSI瀛楃涓詫紝閭d箞璇蜂嬌鐢ㄨ繖涓濂楀啓娉曪細 
    char szString[100]; 
    strcpy(szString,
    "test"); 
    //濡傛灉浣犳兂浣跨敤Unicode瀛楃涓詫紝閭d箞璇蜂嬌鐢ㄨ繖涓濂楋細 
    wchar_t szString[100]; 
    wcscpy(szString,L
    "test"); 
    //濡傛灉浣犳兂閫氳繃瀹氫箟_UNICODE瀹忥紝鑰岀紪璇慉NSI鎴栬匲nicode瀛楃涓蹭唬鐮侊細 
    TCHAR szString[100]; 
    _tcscpy(szString,_TEXT(
    "test"));

     

    CSDN:superarhow璇達細 涓嶈鍐嶄嬌鐢═CHAR鍜宊T浜嗭紒浠栧垎鏋愪簡鍘熷洜鍚庢葷粨錛氬 鏋滄偍姝e紑濮嬩竴涓柊鐨勯」鐩紝璇鋒棤璁哄浣曚篃瑕侀《浣忓帇鍔涳紝鐩存帴浣跨敤UNICODE緙栫爜錛佸垏璁幫紒鎮ㄥ彧闇瑕佸鎮ㄧ殑緇勫憳榪涜10鍒嗛挓鐨勫煿璁紝璁頒綇strcpy鐢?wcscpy錛宻printf鐢╯wprintf浠f浛錛屽父鏁板墠鍔燣錛屽氨鍙互浜嗭紒瀹冧笉浼氳姳鎮ㄥ緢澶氭椂闂寸殑錛屽甫緇欐偍鐨勬槸紼沖畾鍜屽畨鍏紒鐩鎬俊鍋訛紝娌¢敊鐨勶紒錛?/p>

    涓銆?鍦ㄥ瓧絎︿覆鍓嶅姞涓涓狶浣滅敤:
       濡?nbsp; L"鎴戠殑瀛楃涓?    琛ㄧず灝咥NSI瀛楃涓茶漿鎹㈡垚unicode鐨勫瓧絎︿覆錛屽氨鏄瘡涓瓧絎﹀崰鐢ㄤ袱涓瓧鑺傘?
      strlen("asd")   =   3;  
      strlen(L"asd")   =   6;
      浜屻?nbsp; _T瀹忓彲浠ユ妸涓涓紩鍙峰紩璧鋒潵鐨勫瓧絎︿覆錛屾牴鎹綘鐨勭幆澧冭緗紝浣垮緱緙栬瘧鍣ㄤ細鏍規嵁緙栬瘧鐩爣鐜閫夋嫨鍚堥傜殑錛圲nicode榪樻槸ANSI錛夊瓧絎﹀鐞嗘柟寮?
       濡傛灉浣犲畾涔変簡UNICODE錛岄偅涔坃T瀹忎細鎶婂瓧絎︿覆鍓嶉潰鍔犱竴涓狶銆傝繖鏃?_T("ABCD") 鐩稿綋浜?L"ABCD" 錛岃繖鏄瀛楃涓層?
       濡傛灉娌℃湁瀹氫箟錛岄偅涔坃T瀹忎笉浼氬湪瀛楃涓插墠闈㈠姞閭d釜L錛宊T("ABCD") 灝辯瓑浠蜂簬 "ABCD"
    涓夈乀EXT,_TEXT 鍜宊T 涓鏍風殑
    濡備笅闈笁璇彞錛?nbsp; 
      TCHAR   szStr1[]   =   TEXT("str1");  
      char   szStr2[]   =   "str2";  
      WCHAR   szStr3[]   =   L("str3");  
      閭d箞絎竴鍙ヨ瘽鍦ㄥ畾涔変簡UNICODE鏃朵細瑙i噴涓虹涓夊彞璇濓紝娌℃湁瀹氫箟鏃跺氨絳変簬絎簩鍙ヨ瘽銆?nbsp; 
      浣嗕簩鍙ヨ瘽鏃犺鏄惁瀹氫箟浜哢NICODE閮芥槸鐢熸垚涓涓狝NSI瀛楃涓詫紝鑰岀涓夊彞璇濇繪槸鐢熸垚UNICODE瀛楃涓層?nbsp; 
      涓轟簡紼嬪簭鐨勫彲縐繪鎬э紝寤鴻閮界敤絎竴縐嶈〃紺烘柟娉曘?nbsp; 
      浣嗗湪鏌愪簺鎯呭喌涓嬶紝鏌愪釜瀛楃蹇呴』涓篈NSI鎴朥NICODE錛岄偅灝辯敤鍚庝袱縐嶆柟娉曘?/p>

    ]]>
    青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              欧美激情一区二区三区| 久久另类ts人妖一区二区| 国产精品黄页免费高清在线观看| 你懂的视频一区二区| 久久九九热免费视频| 久久久久9999亚洲精品| 久久久久天天天天| 久久久在线视频| 久久一二三区| 欧美大片91| 欧美成人按摩| 欧美精品久久99| 欧美精品自拍| 国产精品男女猛烈高潮激情| 亚洲欧洲一区二区三区久久| 欧美午夜一区二区福利视频| 国产精品wwwwww| 国产欧美在线视频| 亚洲电影成人| 中国女人久久久| 久久久久国产精品www| 欧美高清视频www夜色资源网| 欧美高清在线播放| 99精品国产在热久久婷婷| 亚洲自拍偷拍色片视频| 米奇777超碰欧美日韩亚洲| 欧美午夜不卡在线观看免费| 欧美午夜精品久久久久久超碰| 国产精品久久久久影院色老大| 黄色成人在线免费| 9色精品在线| 久久天天综合| 亚洲视频视频在线| 欧美国产日韩一区| 狠狠色狠狠色综合日日tαg| 中文在线一区| 欧美成年人网站| 欧美亚洲一区二区在线| 欧美人妖另类| 亚洲国产欧美一区二区三区同亚洲 | 欧美午夜一区二区| 狠狠色丁香婷婷综合影院| 一本不卡影院| 欧美高清视频| 久久久久一区二区| 国产亚洲欧美一区二区| 亚洲欧美视频在线| 99精品免费网| 欧美日韩一区在线观看| 亚洲国产精品一区二区久| 久久久不卡网国产精品一区| 正在播放亚洲| 欧美三级中文字幕在线观看| 亚洲激情精品| 亚洲大胆av| 欧美激情第五页| 亚洲欧洲精品一区二区三区| 麻豆精品一区二区综合av | 久久久国产视频91| 亚洲欧美日韩一区二区在线| 国产精品久久久久三级| 亚洲午夜激情免费视频| 亚洲精品一区二区三区不| 欧美成人资源网| 日韩视频一区二区三区在线播放免费观看 | 欧美日韩成人| 一二三区精品| 91久久极品少妇xxxxⅹ软件| 米奇777超碰欧美日韩亚洲| 影音先锋亚洲一区| 欧美电影免费| 欧美高清你懂得| 在线视频你懂得一区| 一本色道久久99精品综合| 国产精品毛片在线| 久久99伊人| 久久综合久久久久88| 亚洲人成在线观看| 日韩视频一区二区在线观看 | 国产欧美欧美| 久久免费午夜影院| 另类专区欧美制服同性| 在线观看国产精品淫| 午夜日韩在线观看| 欧美在线短视频| 欧美一区二区三区日韩视频| 韩国女主播一区二区三区| 免费成人性网站| 欧美激情精品久久久久久| 亚洲性夜色噜噜噜7777| 亚洲在线视频网站| 黑人巨大精品欧美一区二区| 欧美黄色成人网| 欧美午夜不卡影院在线观看完整版免费 | 免费成年人欧美视频| 亚洲乱亚洲高清| 一区二区三区 在线观看视频| 国产三级精品在线不卡| 国产精品麻豆欧美日韩ww| 久久国产精品黑丝| 欧美精彩视频一区二区三区| 香蕉久久国产| 麻豆精品视频在线观看| 午夜精品99久久免费| 久久这里有精品15一区二区三区 | 欧美揉bbbbb揉bbbbb| 久久国产精品久久久| 欧美国产欧美亚州国产日韩mv天天看完整| 在线视频亚洲一区| 欧美伊人精品成人久久综合97| 亚洲精品永久免费| 欧美一区免费视频| 亚洲图片在线观看| 老司机午夜精品视频在线观看| 亚洲免费在线视频| 欧美福利视频一区| 另类酷文…触手系列精品集v1小说| 欧美日韩成人精品| 亚洲国产cao| 影音先锋久久久| 亚洲欧美精品一区| 亚洲一区二区免费视频| 国产精品一区二区三区成人| 久久亚洲电影| 欧美视频四区| 亚洲黄色一区二区三区| 国产在线成人| 午夜精品一区二区三区四区| 亚洲一区二区三区久久| 欧美日本久久| 亚洲人成网站777色婷婷| 91久久精品日日躁夜夜躁欧美| 久久精品国产77777蜜臀 | 亚洲一区久久久| 欧美精品一区二区三区蜜桃| 欧美不卡一卡二卡免费版| 激情欧美亚洲| 久久人人九九| 欧美18av| 日韩性生活视频| 欧美日韩国产二区| 中文欧美日韩| 午夜日韩电影| 国产日韩在线看| 久久精品视频在线观看| 欧美亚男人的天堂| 亚洲午夜久久久久久久久电影网| 国产精品99久久久久久www| 欧美日韩国产色视频| 在线一区二区视频| 国产精品家庭影院| 亚洲一区二区精品在线| 欧美在线观看视频| 国产一区二区观看| 玖玖玖免费嫩草在线影院一区| 免费观看久久久4p| 亚洲精品综合久久中文字幕| 欧美日韩精品伦理作品在线免费观看| 亚洲人成免费| 欧美一区午夜精品| 亚洲电影视频在线| 欧美日韩精品免费观看| 亚洲一区二区精品在线| 美国三级日本三级久久99| 亚洲国产日韩在线| 欧美日韩视频一区二区三区| 亚洲天堂偷拍| 免费在线日韩av| 一区二区三区www| 国产精品日韩欧美一区二区| 久久国产精品电影| 91久久夜色精品国产九色| 亚洲午夜免费福利视频| 国产一区二区三区最好精华液| 久久综合网hezyo| 一级成人国产| 欧美成人小视频| 亚洲欧美日韩一区二区在线| 伊人婷婷久久| 国产精品午夜国产小视频| 男人的天堂亚洲在线| 亚洲私人影院| 亚洲国产高清在线| 久久久久青草大香线综合精品| 99视频一区| 亚洲国产精品毛片| 国产欧美日韩免费看aⅴ视频| 美女视频一区免费观看| 亚洲欧美www| 一区二区三区免费网站| 亚洲国产日韩综合一区| 久久精品国产99精品国产亚洲性色| 国产精品欧美风情| 久久欧美中文字幕| aaa亚洲精品一二三区| 狠狠久久亚洲欧美| 国产精品久久一卡二卡| 欧美岛国激情| 久久一区二区三区av| 欧美一区二区精品久久911|