一般LP代表指針,C代表const,T代表寬字符,STR代表字符串,這麼對應下來大概是這樣:
LPCTSTR = const TCHAR*
這裡就不得不說TCHAR wideResult[MaxResultLen]和const TCHAR* wideResult之間的關系
前者是字符數組,後者是字符指針,字符數組大家都知道,存字符的,這裡說下後面的字符指針,這裡const修飾的整個字符指針而不是單單的修飾wideResult這個指針,所以這裡wideResult所指向的內容是常量,不能變的,但是wideResult這個指針的指向是可以變的,也就是不能試圖通過wideResult[i] = 'a';這樣對內容進行改變,但是可以改變wideResult,例如wideResult++;
解釋清楚了這兩者之間的關系了也就能清楚的知道如下這樣的操作是可以的
TCHAR wideResult[MaxResultLen]; ...對wideResult進行賦值操作 LPCTSTR sPath; sPath = wideResult;
下面就來進入正題,重點說說LPCTSTR 和std::wstring之間是如何進行轉換的,
typedef basic_string<wchar_t, char_traits<wchar_t>,allocator<wchar_t> > wstring;
這是一個模板類,類大家都懂的,裡面有很多方法啊,你可以隨意調用,這些對字符串的處理時很有幫助的,而LPCTSTR是什麼,指針啦,指針要對字符串進行復雜的操作是很麻煩的,這裡大家應該都想把LPCTSTR轉成wstring進行處理操作把,下面就說怎麼轉換,其實很簡單
std::wstring wsPath = sPath;
就是如此的簡單,之後wsPath裡面的數據部分存的就是sPath所指向的內容了。
但是如果定義很多這樣的對象會存在一個問題,那就是浪費內存,類內的成員都要分配內存,這樣肯定影響運行速度,所以在不處理的時候最好用LPCTSTR表示字符串,要處理的時候再轉成std::wstring,處理完了之後再轉回來,怎麼轉回來呢
LPCTSTR sPath = wsPath.c_str();
同樣還是如此的簡單,就解決戰斗了。std::wstring中會有很多常用的操作,c_str()是其中的取內容的操作,方便吧!
本文出自 “賣萌程序員” 博客,請務必保留此出處http://7677869.blog.51cto.com/7667869/1266955