1

StringCch* 関数は、CRT 文字列関数の安全なバージョンよりも安全と見なされますか?

StringCchCatW は wcscat_s よりも安全ですか? または StringCchCopyW 対 wcscpy_s ですか?

4

2 に答える 2

2

これは C++ とタグ付けされているため、どちらも使用せず、std::wstring代わりに使用してください。

于 2012-04-18T13:33:50.433 に答える
0

それは、アプリケーションで文字列をどのように扱っているかによって大きく異なります。

Windows SDK を使用すると、多くの人が多くの C ランタイムと Windows API 呼び出しを混在させることになります。Windows API は C ランタイムの上にレイヤー化された C API であるため、Windows プログラマーがこれを行っていることを認識するのは困難です。なぜそれが(潜在的に)間違っているのか。

しかし、基本的には、アプリケーション開発のある時点で、基本的なデータ型をどこから取得するかを選択する必要があります。特にローカライズ API が文字列データの場合、その効果のソート、照合などはまったく異なります。

c-runtimes 文字列サポートの使用を選択できます。これには、「const char*」または wchar_t として型指定された文字列の使用が含まれます。具体的には、Microsoft の c-runtime (GCC を使用して Windows アプリケーションを開発することが可能であるため、複数のコンパイラでコンパイルするコードを記述したい場合は、この区別が重要になる可能性があります) は、テキスト データを _TCHAR に格納することに基づいて、関数のセットを提供します。 _MBCS および _UNICODE マクロを使用して、関数を単一文字からマルチバイト文字、ワイド文字サポート バージョンに切り替えます。

c-runtimes 文字列抽象化を使用することを選択した場合、c-runtimes の「安全な」文字列ルーチンを使用するのが最も理にかなっています。

あるいは、Windows GUI アプリケーションは、Windows SDK データ型 (CHAR、INT、WCHAR、TCHAR、DWORD など) の使用を頻繁に選択します。通常、文字列は LPCTSTR 変数で表されます。この場合、Windows の抽象化である SafeStringCch などを引き続き使用します。 . 最も理にかなっています。

本当に、プログラムでできる最悪のことは、Windows API 呼び出しと c-runtime 呼び出しの間でバウンスし続けることです。これは、エッジ ケースを処理する方法が異なる場合があるためです...そして、これはいくつかの非常にバグを見つけにくい。

于 2012-04-18T16:15:59.643 に答える