何が最も多く使われている文字列タイプのC++とどのように変換とですか。
-
09-09-2019 - |
質問
または方法を殺していない自分自身や誰かので、次のC++コンパイラこじりモーションコントロール間の変換を2つの任意の文字列型を混乱しゃるのでしょうか?
私は困難な時代における符号化のC++から用いられVB6、C#、Rubyのための文字列。がん間30分しようとログインを含む文字列2特別な技術を必要とする文字列はデバッグの窓---いなせやす
とって RPC_WSTR
, std::wstring
や LPCWSTR
あのシーンや他のルールを知らの間で相互に変換す。やなかし拷問?
基本的に私の最も頻繁に使われる文字列型の標準Apiでは、MS-特定/Visual C++ライブラリ;い、次回は、私の見
Error 8 error C2664: 'OutputDebugStringW' : cannot convert parameter 1 from 'std::wstring' to 'LPCWSTR'
更新:思^^^^コンパイルエラーが発生します。いグローバル回答の解決のための特定の課題にあげた例にしています。
解決
が内蔵文字列タイプ:
- C++の文字列を使用std::stringクラス(std::wstringのためのワイド文字)
- Cスタイルの文字列はconst charへのポインター const char*)(または
const wchar_t*
)
両方で使用できるC++のコードです。最APIを含め、WindowsではC言語で記述されることを必要としており、今回の利用charへのポインターより、std::stringクラスです。
Microsoftさを隠すこれらのポインタの背後に複数のマクロです。
LPCWSTRは 長へのポインタ定数のワイド文字列, いわば、 const wchar_t*
.
LPSTRは 長い文字列へのポインタ, いわば、 char*
(const).
このほんの一握りますが、うんうん知られます。また*TSTR異があることを示すために使用されてここから定期的に又はワイドcharの状況に応じて、UNICODEができるようにします。LPCTSTRを解決するLPCWSTRがUNICODEで定義され、LPCSTRます。
いった文字列にする必要がありますが、すぐに知りの私に掲載しています。のマクロのための様々な変異のcharのポインタです。
に変換するcharへのポインタを文字列はシンプルです:
const char* cstr = "hello world";
std::string cppstr = cstr;
その他の方法などhader:
std::string cppstr("hello world");
const char* cstr = cppstr.c_str();
それは、 std::string
かC-スタイルの文字列の引数としてのコンストラクタです。です c_str()
会員機能を返しますC-スタイル文字列になります。
よく使われる図書館の定義自己の文字列の種類、その場合、チェックドキュメンテーションにどのように相互運用の"適切な"文字列。
きは、C++ std::string
クラスとは異なり、charへのポインタは、 行動する として文字列です。例えば:
std:string a = "hello ";
std:string b = "world";
std:string c = a + b; // c now contains "hello world"
const char* a = "hello ";
const char* b = "world";
const char* c = a + b; // error, you can't add two pointers
std:string a = "hello worl";
char b = 'd';
std:string c = a + b; // c now contains "hello world"
const char* a = "hello worl";
char b = 'd';
const char* c = a + b; // Doesn't cause an error, but won't do what you expect either. the char 'd' is converted to an int, and added to the pointer `a`. You're doing pointer arithmetic rather than string manipulation.
他のヒント
ここ
CStringのために主にあなたが必要なものをカバー記事には、OutputDebugStringW (myString.c_str ());
ようこそ; - )
あなただけのstd::string
を受け入れるラッパー関数を作成することができます。次に、関数にCスタイルの文字列を抽出してOutputDebugStringW
に渡します。
std::wstring
とstd::string
はちょうどstd::basic_string<wchar_t>
とstd::basic_string<char>
の別名です。
の両方がC-文字列を受け取り、従来のC文字列のポインタを返す.c_str()
法(LPCWSTR
等)とコンストラクタを有する。
あなたは CStdString を見たいかもしれません。それはかなり簡単に他のほとんどの文字列型に変換し、クロスプラットフォームの標準C ++のCStringの実装です。ほぼすべての文字列関連の頭痛が離れて行くと、それだけで1つのヘッダファイルです作ります。