Compartilhar via


strlen strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l

Obter o comprimento de uma cadeia de caracteres, usando a localidade atual ou uma localidade especificada.Versões mais seguros dessas funções estão disponíveis; consulte strnlen, strnlen_s, strnlen_l, wcsnlen, wcsnlen_s, wcsnlen_l, _mbsnlen, _mbsnlen_l, _mbstrnlen, _mbstrnlen_l

Observação importanteImportante

_mbslen, _mbslen_l, _mbstrlen, e _mbstrlen_l não podem ser usados em aplicativos executados em Tempo de Execução do Windows.Para obter mais informações, consulte Funções de CRT não suportadas com /ZW.

size_t strlen( const char *str ); size_t strlen_l( const char *str, _locale_t locale ); size_t wcslen( const wchar_t *str ); size_t wcslen_l( const wchar_t *str, _locale_t locale ); 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 );

Parâmetros

  • str
    Cadeia de caracteres NULL-finalizada.

  • locale
    A localidade usar.

Valor de retorno

Cada uma dessas funções retorna o número de caracteres em str, excluindo de NULLterminal.Nenhum valor de retorno é reservado para indicar um erro, exceto para _mbstrlen, que retorna ((size_t)(-1)) se a cadeia de caracteres contém um caractere inválido de multibyte.

Comentários

strlen interpreta a cadeia de caracteres como uma cadeia de caracteres de byte único, para que seu valor de retorno é sempre igual ao número de bytes, mesmo se a cadeia de caracteres contém caracteres de multibyte.wcslen é uma versão de largo- caractere de strlen; o argumento de wcslen é uma cadeia de caracteres de largo- caracteres e a contagem de caracteres em caracteres de dois bytes) de largura.wcslen e strlen se comportam de forma idêntica.

Nota de segurança essas funções provoca uma ameaça potencial causada por um problema de estouro de buffer.Problemas de estouro de buffer são um método frequente de ataque do sistema, resultando em uma despropositado elevação de privilégio.Para obter mais informações, consulte Evitando estouros de buffer.

Mapeamentos da rotina de Genérico- texto

Rotina de TCHAR.H

_UNICODE & _MBCS não definidos

_MBCS definido

_UNICODE definido

_tcslen

strlen

strlen

wcslen

_tcsclen

strlen

_mbslen

wcslen

_tcsclen_l

strlen_l

_mbslen_l

wcslen_l

_mbslen,_mbslen_l, _mbstrleneo retorno de_mbstrlen_l o número de caracteres de multibyte em uma cadeia de caracteres de multibyte- caractere mas elas não testam validade de multibyte- caractere._mbstrleneos testes de_mbstrlen_l validade de multibyte- caractere e reconhecem sequênciassetlocale, wsetlocalede multibyte- caractere.Se a cadeia de caracteres passada para _mbstrlen ou_mbstrlen_l contêm um caractere inválido de multibyte para a página de código, retornará -1 e defina errno a EILSEQ.

O valor de saída é afetado pela configuração da categoria de LC_CTYPE de localidade; consulte setlocale para mais informações.As versões dessas funções sem o sufixo de _l usam a localidade atual para este comportamento de são dependentes; as versões com o sufixo de _l são idênticas exceto que usam o parâmetro de localidade passado em vez disso.Para obter mais informações, consulte Localidade.

Requisitos

Rotina

Cabeçalho necessário

strlen

<string.h>

strlen_l

<string.h>

wcslen, wcslen_l

<string.h> ou <wchar.h>

_mbslen, _mbslen_l

<mbstring.h>

_mbstrlen, _mbstrlen_l

<stdlib.h>

Para informações extras de compatibilidade Compatibilidade na introdução, consulte.

Exemplo

// 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) );   
  
}
  

Equivalência do .NET Framework

System::String::Length

Consulte também

Referência

Manipulação de cadeia de caracteres (CRT)

Interpretação de seqüências de caracteres Multibyte

Localidade

setlocale, wsetlocale

strcat, wcscat, _mbscat

strcmp, wcscmp, _mbscmp

Funções de strcoll

strcpy, wcscpy, _mbscpy

strrchr, wcsrchr, _mbsrchr, _mbsrchr_l

_strset, _strset_l, _wcsset, _wcsset_l, _mbsset, _mbsset_l

strspn, wcsspn, _mbsspn, _mbsspn_l