web-dev-qa-db-ja.com

C ++でTCHARを文字列に変換する

私はTCHARを次のように文字列に変換しようとしています:

std::string mypath;
TCHAR path[MAX_PATH];
GetModuleFileName( NULL, path, MAX_PATH );

mypathpathに設定する必要があります。単純なループを作成し、path[index]mypathに連結しましたが、これは機能しますが、この方法は好きではありません。

私はC++の初心者ですが、たくさんのC#を実行しました。 「char」を渡すGetModuleFileNameの例を見てきましたが、気に入らないようです。 TCHARまたはLPWSTRが必要です。

19
David

TCHARは、文字セットの定義内容に応じて、charまたはwcharとして定義されるマクロです。 2008年以降のデフォルトでは、文字はユニコードに設定されています。このコードは、文字セットを変更した場合に機能します。

int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR* bob ="hi";
    string s = bob;    
}

プロジェクト設定を右クリックして、以下を変更します

enter image description here

tCHARをUnicode文字セットとして使用する場合は、 wstring を使用します

23
rerun

私が本当にする必要があるとき、私は以下を使用します:

TCHAR  infoBuf[32767]
GetWindowsDirectory(infoBuf, 32767); 
//Let's convert to string...
wstring test(&infoBuf[0]); //convert to wstring
string test2(test.begin(), test.end()); //and convert to string.

お役に立てば幸いです。

9
OhadM

パスを文字で指定する場合は、GetModuleFilenameAを呼び出す必要があります。その関数は、LPSTRの代わりにLPTSTRを取ります。

文字列を取得または返すWin32関数のほとんどすべてに、A(ANSI?)で終わるバージョンとW(ワイド)で終わるバージョンがあります。

8
avakar

wcstombsまたは_TCHAR*関数を使用して、char*からwcstombs_sに変換することもできます。

http://msdn.Microsoft.com/en-us/library/5d7tc9zw%28v=vs.80%29.aspx

5
nuoritoveri