strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l
Obtiene la longitud de una cadena, con la configuración regional actual o una configuración regional especificada.Versiones más seguras de estas funciones están disponibles; vea strnlen, los strnlen_s, strnlen_l, wcsnlen, los wcsnlen_s, wcsnlen_l, _mbsnlen, _mbsnlen_l, _mbstrnlen, _mbstrnlen_l
Importante |
---|
_mbslen, _mbslen_l, _mbstrlen, y _mbstrlen_l no se pueden utilizar en las aplicaciones que se ejecutan en tiempo de ejecución de Windows.Para obtener más información, vea Funciones CRT no compatibles con /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
Cadena terminada en null.locale
Configuración regional a utilizar.
Valor devuelto
Cada una de estas funciones devuelve el número de caracteres de str, excepto NULL terminal.No se reserva ningún valor devuelto para indicar un error, a excepción de _mbstrlen, que devuelve ((size_t)(-1)) si la cadena contiene un carácter no válido multibyte.
Comentarios
strlen interpreta la cadena como una cadena de caracteres de solo- byte, de modo que el valor devuelto siempre es igual al número de bytes, incluso si la cadena contiene caracteres multibyte.wcslen es una versión con caracteres anchos de strlen; el argumento de wcslen es una cadena de caracteres y el recuento de caracteres está en caracteres (de dos bytes) anchos.wcslen y strlen se comportan exactamente igual de otra manera.
Las funciones de Nota de seguridad These incurren en una amenaza potencial causada por un problema de saturación del búfer.Los problemas de saturación del búfer es un método frecuente de ataque del sistema, lo que da como resultado una elevación de privilegios injustificable.Para obtener más información, vea Para evitar las saturaciones del búfer.
Asignaciones de la rutina de Genérico- texto
Rutina de TCHAR.H |
_UNICODE y _MBCS no definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tcslen |
strlen |
strlen |
wcslen |
_tcsclen |
strlen |
_mbslen |
wcslen |
_tcsclen_l |
strlen_l |
_mbslen_l |
wcslen_l |
_mbslen,_mbslen_l, _mbstrlen y devuelven de _mbstrlen_l el número de caracteres multibyte en una cadena de multibyte- carácter pero no comprueban la validez del multibyte- carácter._mbstrlen y _mbstrlen_l prueba para la validez del multibyte- carácter y reconoce las secuencias setlocale, _wsetlocale de multibyte- carácter.Si la cadena pasada a _mbstrlen o _mbstrlen_l contiene un carácter no válido multibyte para la página de códigos, devuelve -1 y establece errno a EILSEQ.
El valor de salida se ve afectado por el valor de la categoría de LC_CTYPE de configuración regional; vea setlocale para obtener más información.Las versiones de estas funciones sin el sufijo de _l utilizan la configuración regional actual para este comportamiento configuración regional-dependiente; las versiones con el sufijo de _l son idénticas salvo que utilizan el parámetro locale pasado en su lugar.Para obtener más información, vea Configuración regional.
Requisitos
Rutina |
Encabezado necesario |
---|---|
strlen |
<string.h> |
strlen_l |
<string.h> |
wcslen, wcslen_l |
<string.h> o <wchar.h> |
_mbslen, _mbslen_l |
<mbstring.h> |
_mbstrlen, _mbstrlen_l |
<stdlib.h> |
Para obtener información adicional de compatibilidad, vea Compatibilidad en la Introducción.
Ejemplo
// 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) );
}
Equivalente en .NET Framework
Vea también
Referencia
Interpretación de secuencias de Multibyte- Carácter
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l