lstrlen
및 기타 lstrxxx
은 Windows API입니다. 그들은 ANSI 및 유니 코드 버전 lstrlenA
및 lstrenW
있습니다. 그들은 Windows 3.1의 시대에 strlen
이상의 몇 가지 장점을 가지고있었습니다. 그들은 지금 어떤 이점도 가지고 있지 않습니다. 이러한 함수를 사용하여 코드를 작성하면 C의 표준과 호환되지 않으며 Windows에서만 컴파일됩니다.
_tstrlen
에서는 Windows 95 ANSI로 컴파일 할 수있는 코드의 한 세트를 작성할 수 있기 때문에 1990 년대와 2000 년대 초반에 유용 C. 표준 ANSI
strlen
또는 유니 코드
wcslen
중 하나에 대한 매크로이며, 유니 코드 Windows NT. 또한 Microsoft는 ANSI 및 유니 코드 모두에 대해 한 세트의 설명서를 작성할 수 있기 때문에 유용합니다.
그렇지 않으면 _tstrxxx
문자열 매크로와 TCHAR
등은 더 이상 유용하지 않습니다. 당신은 C.
표준 그러나 그런 다음, * nix에서 스크립트를 운영 체제에서 사용하는 "와이드 C-문자열"wcsxxx
기능을 사용할 단지 수있는 Windows 95 호환되는 코드를 작성하는이 모든 고통을 통해 갈 아무 소용이 없다 UTF-8 및 strxxx
기능 UTF-16 및 wcsxxx
을 사용하는 Windows와는 대조적입니다. 당신이 _tstrxxx
매크로를 사용하여 * nix와 Windows 모두에서 유니 코드 호환 코드를 작성할 수 있다고 가정합니다. 다른 프로그래머는 _tstrxxx
매크로로 혼란 스럽겠지만 최소한 코드를 컴파일 할 확률이 더 큽니다!
https://www.codeproject.com/Messages/2654087/Whats-the-differences-between-lstrlen-and-_tcslen.aspx –
아니요, 해당 매크로는 ANSI (char) 또는 멀티 바이트 (wchar) 함수 및 유형. 중복이 없으며 90 년대 초반부터 사람들이 ANSI 또는 유니 코드와 동일한 코드를 컴파일 할 수 있도록 매크로를 다시 작성했습니다. OS는 Windows NT 이전에 유니 코드를 사용하지 않았다는 것을 기억하십시오. C++은 2011 년'char16_t','char32_t','std :: u16string' 및'std :: u32string' 유형으로 만 유니 코드를 추가했습니다. –
어쨌든 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)과 함께 참조 및 스마트 포인터를 전달하십시오. 포인터 연산 대신 반복자 –