問題タブ [tchar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - TCHAR []、LPWSTR、LPTSTR、およびGetWindowテキスト関数
したがって、GetWindowTextはMSDNで次のように宣言されています。
ただし、コードが機能するには、2番目のパラメーターを次のように宣言する必要があります。
次に、関数を呼び出しますGetWindowText(hWnd,Wtitle,255);
。LPTSTRはtcharの配列へのポインターであるため、LPTSTRの宣言はTCHAR []の宣言に似ていますか?ただし、このようには機能しません。TCHAR []を使用すると、プログラムは有効なGetWindowText結果を返します(これは、タイトルのシンボルの数に等しい整数です)。問題は、TCHAR []から正確なタイトルを取得するにはどうすればよいですか?次のようなコード
また
数値を返します。これを特定の文字列と比較するにはどうすればよいですか?
も動作しません。
c++ - printf の引数としてのユーザー定義の変換演算子
TCHAR* のユーザー定義演算子を定義したクラスがあります。
みたいなことができるようになりたい
あるいは
しかし、試してみると、printf は常に値の代わりに (null) を出力します。また、通常の char* 演算子や、const などのバリエーションも試しました。演算子を明示的に呼び出すか、次のようにキャストした場合にのみ正しく機能します。
しかし、私はキャストしたくありません。これはどのように達成できますか?
const TCHAR* のパラメーターを持つ関数を作成して、演算子 TCHAR* を強制的に呼び出す可能性があることに注意してください。ただし、これも実装したくありません。
visual-c++ - charをTCHAR*に変換しますargv[]
どうすればテキストを入力できますTCHAR* argv[]
か?
または:どうすればからに変換できchar
ますTCHAR* argv[]
か?
windows - クロスプラットフォームで使いやすい方法で C/C++ の Unicode 文字列を処理する方法は?
Windows 以外のプラットフォームでは、文字列を簡単に使用char *
して UTF-8 として扱うことができます。
問題は、Windows では、wchar* 文字列 (W) を使用してメッセージを受け入れて送信する必要があることです。ANSI 関数 (A) を使用する場合、Unicode はサポートされません。
したがって、真に移植可能なアプリケーションを作成したい場合は、Windows で Unicode としてコンパイルする必要があります。
さて、コードをきれいに保つために、文字列を処理するための推奨される方法、コードの醜さを最小限に抑える方法を確認したいと思います。
必要な文字列の種類: std::string
, std::wstring
, std::tstring
, char *
, wchat_t *
, TCHAR*
( CString
ATL 1)。
発生する可能性のある問題:
cout/cerr/cin
およびその Unicode バリアントwcout,wcerr,wcin
- すべてのワイド文字列関数とその TCHAR マクロの名前が変更されまし
strcmp
た。wcscmp
_tcscmp
- コード内の定数文字列。TCHAR を使用すると、コードに
_T()
マクロを入力する必要があります。
どのアプローチが最善だと思いますか? (例は大歓迎です)
個人的にはstd::tstring
アプローチに行きますが、必要な変換がどのように行われるかを確認したいと思います。
c++ - Visual Studio 2008 C++ での柔軟な文字列処理
Visual Studio 2008 c++ で _T のコツをつかみ始めていますが、まだいくつかのことがわかりません。柔軟性の利点はわかりますが、すぐに基本を習得できない場合は、標準的な方法に戻ると思います。
以下のコードの考え方は、-d のパラメーターをスキャンし、その後に続くテキストを文字列変数 fileDir に格納するというものです。また、他のパラメータも無視されます。
どんな助けでも大歓迎です。
c++ - ZeroMemory() の後でも TCHAR にガベージがあるのはなぜですか?
次のコード行を継承しました。
ただし、最初の 3 バイトがガベージ値で満たされているため、これは失敗します (ただし、-128、-13、23 の順序で常に同じ値になります)。私は言った、まあいいと言って、それを次のように変更しました:
しかし、ガベージ値は持続しました! ZeroMemory() 呼び出しの後、他のすべてのバイトが適切に消去され、GetModuleFileName() の後、ディレクトリがバッファに適切に格納されたことに注意してください。temp が temp+3 に置き換えられたかのようです。これは単語の境界と関係がありますか?
誰かが何が起こっているのか、それを修正する方法を説明できますか?
windows - TCHAR と _TCHAR を区別する
Windows ヘッダー tchar.h で定義されている 2 つのシンボルTCHAR
と型のさまざまな違いは何ですか? _TCHAR
例を挙げて説明します。コードで _TCHAR ではなく TCHAR を使用するシナリオを簡単に説明してください。(10 点)
c++ - Windows C++: LPCTSTR と const TCHAR の比較
私のアプリケーションでは、コードの上部近くで文字列変数を宣言して、RegisterClassEx、CreateWindowEx などの呼び出しで使用するウィンドウ クラスの名前を定義しています。これで、LPCTSTR は typedef であり、最終的にはTCHAR(UNICODEが定義されているかどうかに応じてCHARまたはWCHAR)まで続きますが、これを使用する方が良いかどうか疑問に思っていました:
またはこれ:
個人的には、文字列を char の配列として宣言することを考えたことのない JavaScript、PHP、C# のバックグラウンドから来た LPCTSTR の使用を好みます。
しかし、実際にはどちらを使用しても利点はありますか、それとも実際にはどちらを選択しても違いはありませんか?
ご回答ありがとうございます。
c++ - tchar セーフ関数 -- UTF-8 定数のカウント パラメータ
ライブラリを char から TCHAR に移植しています。MSDN によると、このフラグメントの count パラメータは、バイト数ではなく、マルチバイト文字の数です。それで、私はこれを正しく理解しましたか?VC9 の私のプロジェクト プロパティは「Unicode 文字セットを使用する」と言っています。それは正しいと思いますが、それがカウント パラメータにどのように影響するかはわかりません。
「Windows プラットフォームでのみサポートされています。_mbsncmp と _mbsnbcmp は、strncmp のマルチバイト バージョンです。_mbsncmp は最大で count 個のマルチバイト文字を比較し、_mbsnbcmp は最大で count バイトを比較します。どちらも現在のマルチバイト コード ページを使用します。
_tcsnccmp と _tcsncmp は、それぞれ _mbsncmp と _mbsnbcmp に対応するジェネリック関数です。_tccmp は _tcsnccmp と同等です。」
同様の質問は、_tcslen と _tcsclen です。
c++ - 従来のTCHARコードとのインターフェースに適したスタイル
TCHARを広範囲に使用する他の誰かのコードを変更しています。コードでstd::wstringを使用する方が良い形式ですか?wstringは、widecharプラットフォームのTStringと同等である必要があるため、問題は発生しません。理論的根拠は、TCHARをサポートするよりも生のwstringを使用する方が簡単です...たとえば、boost:wformatを使用することです。
次のメンテナにとって、どちらのスタイルがより明確になりますか?文字列の複雑さを理解しようとして数時間を無駄にしました。wstringを使用するだけで、理解する必要のあるものの半分が削減されるようです。
...唯一の違いはアロケータです。
プログラムがWindow9xマシンに到達するというまれなケースでは、UTF-16文字列を8ビット文字に変換できるAPIレイヤーがまだあります。新しいコード開発にTCHARを使用しても意味がありません。 ソース