1

char *.

たとえば、私のコードは次のとおりです。

std::string myString;
GetCurrentDirectoryA( MAX_PATH, myString );

この場合、文字列変数を LPSTR に変換するにはどうすればよいですか。

この関数は文字列の内容を入力として渡すためのものではありませんが、関数は実行後に一部の内容を文字列変数に格納します。したがって、 myString.c_str( ) は除外されます。

編集:文字列の概念を削除して、次のようなものに置き換える回避策があります

char myString[ MAX_PATH ];

しかし、それは私の目的ではありません。文字列を使いたい。可能な方法はありますか?

のようなキャストも

GetCurrentDirectoryA( MAX_PATH, ( LPSTR ) myString );

動かない。

助けてくれてありがとう。

4

3 に答える 3

6

std::string通常、人々は使いやすくするために必要な Windows 関数を次のように書き直します。

std::string GetCurrentDirectoryA()
{
  char buffer[MAX_PATH];
  GetCurrentDirectoryA( MAX_PATH, buffer );
  return std::string(buffer);
}

またはワイド文字サポートの場合:

std::wstring GetCurrentDirectoryW()
{
  wchar_t buffer[MAX_PATH];
  GetCurrentDirectoryW( MAX_PATH, buffer );
  return std::wstring(buffer);
}
于 2013-04-01T07:18:32.647 に答える
2

LPTSTRとして定義されてTCHAR*いるため、実際には単なる通常の C 文字列ですが、コードでASCIIを使用しているか Unicode を使用しているかによって異なります。そうする

LPTSTR lpStr = new TCHAR[256];
ZeroMemory(lpStr, 256);
//fill the string using i.e. _tcscpy
const char* cpy = myString.c_str();
_tcscpy (lpStr, cpy);
//use lpStr

およびこのスレッドの参照については、こちらを参照してください。_tcscpy

于 2013-04-01T06:41:42.077 に答える