内容へ移動
C++プログラマのためのC++/CLI入門
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
現在位置:
TOP
»
clr
»
文字列
clr:文字列
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
{{indexmenu_n>1}} ====== 文字列 ====== C++/CLIの文字列操作は、System::Stringを使います。ソースコード中のリテラル文字列は、必要に応じてString^に格上げされます。内部的にはwchar_t(UTF-16)で値を保持しています。 ===== char*やwchar_t*からString^への変換 ===== <code cpp> const char* p = "AAA"; String^ s = gcnew String(p); </code> でできます。 ===== String^からwchar_t*への変換 ===== <code cpp> #include <vcclr.h> String^ s = L"AAA"; pin_ptr<const wchar_t> pIn = PtrToStringChars(s); </code> ==== String^からchar*への変換 ==== String^はユニコードなので変換の際には注意が必要。 === StringToHGlobalAnsiを使う === <code cpp> std::string getStdString(String^ s) { std::string ret; System::IntPtr pp = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(s); ret = (const char*)pp.ToPointer() ; System::Runtime::InteropServices::Marshal::FreeHGlobal(pp); return ret; } </code> === wcstombs_sを使う。locale依存 === <code cpp> std::string getStdString(String^ s) { std::string ret; if ( s == nullptr ) return ret; pin_ptr<const wchar_t> p = PtrToStringChars(s); size_t len = (s->Length+1) * sizeof(wchar_t); char* pT = (char*)malloc(len); size_t retutrnvalue; if ( 0 != wcstombs_s( &retutrnvalue, pT, len, p, len ) ) { free(pT); return ret; } ret = pT; free(pT); return ret; } </code> Stringの基本事項として、一度設定したら内部の文字列は変化しない(内部の文字列を変更するメソッドはない)があります。これによってあるString^ハンドルによる操作で、たのString^ハンドルの文字列が変化することを心配する必要がなくなります。 また、Stringに対してで暗黙のCLRサポートがあります。 - ==で比較すると、ハンドルの比較ではなくて文字列の比較が行われる。!=も同様 - +で色々な型を足すことができる。 これら関してはC++との互換性で影響が出ることがあります。 以下のC++コードはC++/CLIだとコンパイルエラーになります。 <code cpp> #include "stdio.h" int main(int argc, char* argv[]) { const char* p = "ABC" + 1; printf(p); return 0; } </code> ===== 空文字の扱い ===== 空文字を扱うための仕組みもあるので""やL""よりもこちらを使うほうがいいかもしれません。 <code cpp> if ( s == nullptr || s->Length == 0 ) return; </code> の代わりに <code cpp> if ( String::IsNullOrEmpty(s) ) return; </code> 同様に <code cpp> return L""; </code> の代わりに <code cpp> return String::Empty; </code>
/var/www/html/virtual/cppcli/data/pages/clr/文字列.txt
· 最終更新: 2013/12/23 09:08 (外部編集)
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ