다음을 통해 공유


strlen, wcslen, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l

현재 로캘 또는 지정된 로캘을 사용하여 문자열의 길이를 가져옵니다. 이러한 기능의 더 안전한 버전을 사용할 수 있습니다. strnlen, strnlen_s, wcsnlen, wcsnlen_s, _mbsnlen, _mbsnlen_l, _mbstrnlen, _mbstrnlen_l를 참조하세요.

중요

_mbslen, _mbslen_l, _mbstrlen 및 _mbstrlen_l는 Windows 런타임에서 실행되는 응용 프로그램에서 사용할 수 없습니다.자세한 내용은 CRT 함수는 /ZW 옵션을 지원하지 않음을 참조하세요.

size_t strlen(    const char *str ); size_t wcslen(    const wchar_t *str  ); size_t _mbslen(    const unsigned char *str  ); size_t _mbslen_l(    const unsigned char *str,    _locale_t locale ); size_t _mbstrlen(    const char *str ); size_t _mbstrlen_l(    const char *str,    _locale_t locale );

매개 변수

  • str
    Null 종료 문자열입니다.

  • locale
    사용할 로캘입니다.

반환 값

이러한 각 함수는 터미널 NULL을 제외하고 str의 문자 수를 반환합니다. 문자열에 잘못된 멀티바이트 문자가 포함된 경우((size_t)(-1))을 반환하는 _mbstrlen 및 _mbstrlen_l을 제외하고 오류를 나타내도록 예약된 반환 값은 없습니다.

설명

strlen은 문자열을 싱글바이트 문자열로 해석하므로 문자열에 멀티바이트 문자가 포함되어 있더라도 해당 반환 값은 항상 바이트 수와 동일합니다. wcslen은 strlen의 와이드 문자 버전이고 wcslen의 인수는 와이드 문자열이고 문자 수는 와이드(2바이트) 문자로 계산합니다. 그렇지 않으면 wcslen과 strlen이 동일하게 작동합니다.

보안 정보 다음 함수는 버퍼 오버런 문제로 인해 발생하는 잠재적인 위협을 일으킵니다. 버퍼 오버런 문제는 자주 사용되는 시스템 공격 방법으로, 불필요한 권한 상승을 초래합니다. 자세한 내용은 버퍼 오버런 방지를 참조하십시오.

제네릭 텍스트 라우팅 매핑

TCHAR.H 루틴

_UNICODE 및 _MBCS 정의되지 않음

_MBCS 정의됨

_UNICODE 정의됨

_tcslen

strlen

strlen

wcslen

_tcsclen

strlen

_mbslen

wcslen

_tcsclen_l

strlen

_mbslen_l

wcslen

_mbslen 및 _mbslen_l은 멀티바이트 문자열의 멀티바이트 문자 수를 반환하지만 멀티바이트 문자의 유효성을 테스트하지는 않습니다. _mbstrlen 및 _mbstrlen_l은 멀티바이트 문자의 유효성을 테스트하고 멀티바이트 문자 시퀀스를 인식합니다. _mbstrlen 또는 _mbstrlen_l에 전달된 문자열에 코드 페이지에 대해 잘못된 멀티바이트 문자가 포함되어 있으면 이 함수는 -1을 반환하고 errno를 EILSEQ로 설정합니다.

출력 값은 로캘의 LC_CTYPE 범주 설정에 영향을 받습니다. 자세한 내용은 setlocale을 참조하십시오. _l 접미사가 없는 이러한 함수 버전은 이 로캘 종속 동작에 현재 로캘을 사용하며, _l 접미사가 있는 버전은 전달된 로캘 매개 변수를 대신 사용하는 경우를 제외하고는 동일합니다. 자세한 내용은 로캘을 참조하십시오.

요구 사항

루틴

필수 헤더

strlen

<string.h>

wcslen

<string.h> 또는 <wchar.h>

_mbslen, _mbslen_l

<mbstring.h>

_mbstrlen, _mbstrlen_l

<stdlib.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.

예제

// crt_strlen.c
// Determine the length of a string. For the multi-byte character
// example to work correctly, the Japanese language support for
// non-Unicode programs must be enabled by the operating system.


#include <string.h>
#include <locale.h>

int main()
{
   char* str1 = "Count.";
   wchar_t* wstr1 = L"Count.";
   char * mbstr1;
   char * locale_string;

   // strlen gives the length of single-byte character string
   printf("Length of '%s' : %d\n", str1, strlen(str1) );

   // wstrlen gives the length of a wide character string
   wprintf(L"Length of '%s' : %d\n", wstr1, wcslen(wstr1) );

   // A multibyte string: [A] [B] [C] [katakana A] [D] [\0]
   // in Code Page 932. For this example to work correctly,
   // the Japanese language support must be enabled by the
   // operating system.
   mbstr1 = "ABC" "\x83\x40" "D";

   locale_string = setlocale(LC_CTYPE, "Japanese_Japan");

   if (locale_string == NULL)
   {
      printf("Japanese locale not enabled. Exiting.\n");
      exit(1);
   }
   else
   {
      printf("Locale set to %s\n", locale_string);
   }

   // _mbslen will recognize the Japanese multibyte character if the
   // current locale used by the operating system is Japanese
   printf("Length of '%s' : %d\n", mbstr1, _mbslen(mbstr1) );

   // _mbstrlen will recognize the Japanese multibyte character
   // since the CRT locale is set to Japanese even if the OS locale
   // isnot. 
   printf("Length of '%s' : %d\n", mbstr1, _mbstrlen(mbstr1) );
   printf("Bytes in '%s' : %d\n", mbstr1, strlen(mbstr1) );   
  
}
  

해당 .NET Framework 항목

System::String::Length

참고 항목

참조

문자열 조작(CRT)

멀티바이트 문자 시퀀스 해석

로캘

setlocale, _wsetlocale

strcat, wcscat, _mbscat

strcmp, wcscmp, _mbscmp

strcoll 함수

strcpy, wcscpy, _mbscpy

strrchr, wcsrchr, _mbsrchr, _mbsrchr_l

_strset, _strset_l, _wcsset, _wcsset_l, _mbsset, _mbsset_l

strspn, wcsspn, _mbsspn, _mbsspn_l