lstrlen
その他lstrxxx
はWindows APIです。彼らはANSIとユニコードバージョンlstrlenA
とlstrenW
を持っています。 Windows 3.1の時代には、strlen
以上の利点がありました。彼らは今、何の利点もありません。これらの関数を使ってコードを書くと、Cの標準と互換性がなくなり、Windowsでのみコンパイルされます。
_tstrlen
はあなたが1つのWindows 95用のANSIでコンパイルすることができ、コードのセット、およびUnicodeを書くことができますので、標準C.これは、1990年代と2000年代初頭に有用であったされているANSIまたはUnicode strlen
wcslen
のいずれかのためのマクロですWindows NT。 MicrosoftがANSIとUnicodeの両方のドキュメントを作成できるので便利です。
これ以外の場合、これらの_tstrxxx
文字列マクロとTCHAR
などはもはや役に立ちません。 Windows 95と互換性のあるコードを書くために、この苦痛を経験する必要はありません。標準的な "ワイドC文字列" wcsxxx
関数を使用することができます。
しかし、* nixオペレーティングシステムでは、 UTF-8およびstrxxx
機能UTF-16とwcsxxx
を使用するWindowsとは対照的です。あなたは、* nixとWindowsの両方でUnicode互換のコードを書くために_tstrxxx
マクロを使うことができると思います。他のプログラマはあなたの_tstrxxx
マクロで混乱しますが、少なくともコードはコンパイルするより良い機会です!
https://www.codeproject.com/Messages/2654087/Whats-the-differences-between-lstrlen-and-_tcslen.aspx –
いいえ、これらは* ANSI(char)またはマルチバイト(wchar)の関数と型があります。重複はなく、 '再発明 'のマクロはANSIやUnicodeのコードをコンパイルするための90年代初頭から存在していました。 OSはWindows NTよりも前にUnicodeを使用していなかったことを覚えておいてください。 C++は2011年に 'char16_t'、' char32_t'、 'std :: u16string'、' std :: u32string'型のUnicodeを追加しました。 –
いずれにしても、C++で 'lstrlen'や' _tcslen'のようなC関数と型を混ぜ合わせるべきではありません。言語の種類とアルゴリズムを使用する必要があります。 [std :: string.length()](http://www.cplusplus.com/reference/string/string/length/)または[u16string.length()](http://www.cplusplus.com/)を使用してください。参照/文字列/ u16string /)。型推論に 'auto'を使うべきです。使用すると簡単に漏れることができる生ポインタの代わりに[unique_ptr](http://en.cppreference.com/w/cpp/memory/unique_ptr)で参照とスマートポインタを渡します。ポインター算術の代わりのイテレーター –