strlen
, wcslen
, _mbslen
, _mbslen_l
, , _mbstrlen
, _mbstrlen_l
Obtiene la longitud de una cadena usando la configuración regional actual o una configuración regional especificada. Hay disponibles versiones más seguras de estas funciones; consulte strnlen
, strnlen_s
, wcsnlen
, wcsnlen_s
, _mbsnlen
, _mbsnlen_l
, _mbstrnlen
, _mbstrnlen_l
Importante
_mbslen
, _mbslen_l
, _mbstrlen
y _mbstrlen_l
no se pueden usar en aplicaciones que se ejecutan en Windows en tiempo de ejecución. Para obtener más información, vea Funciones de CRT no admitidas en aplicaciones de la Plataforma universal de Windows.
Sintaxis
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
);
Parámetros
str
Cadena terminada en un valor nulo.
locale
Configuración regional que se va a usar.
Valor devuelto
Cada una de estas funciones devuelve el número de caracteres de str
, sin incluir el carácter null de terminación. No se reserva ningún valor devuelto para indicar un error, a excepción de _mbstrlen
y _mbstrlen_l
, que devuelven ((size_t)(-1))
si la cadena contiene un carácter multibyte no válido.
Comentarios
strlen
interpreta la cadena como una cadena de caracteres de un 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 anchos y el recuento de caracteres está en caracteres anchos (de dos bytes). Por lo demás,wcslen
y strlen
se comportan de forma idéntica.
Nota de seguridad Estas funciones representan una posible amenaza por un problema de saturación del búfer. Los problemas de saturación del búfer son un método frecuente de ataque del sistema, que produce una elevación de privilegios no justificada. Para obtener más información, consulte Evitar saturaciones del búfer.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Asignaciones de rutinas de texto genérico
Rutina TCHAR.H |
_UNICODE y _MBCS no definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tcslen |
strlen |
strlen |
wcslen |
_tcsclen |
strlen |
_mbslen |
wcslen |
_tcsclen_l |
strlen |
_mbslen_l |
wcslen |
_mbslen
y _mbslen_l
devuelven el número de caracteres multibyte en una cadena de caracteres multibyte, pero no prueban la validez de caracteres multibyte. _mbstrlen
y _mbstrlen_l
comprueban la validez de los caracteres multibyte y reconocen secuencias de caracteres multibyte. Si la cadena que se pasa a _mbstrlen
o _mbstrlen_l
contiene un carácter multibyte no válido para la página de códigos, la función devuelve -1 y establece errno
en EILSEQ
.
El valor de salida se ve afectado por el valor de la categoría LC_CTYPE
de la configuración regional. Para obtener más información, vea setlocale
. Las versiones de estas funciones sin el sufijo _l
usan la configuración regional actual de su comportamiento dependiente de la configuración regional; las versiones con el sufijo _l
son idénticas salvo que usan el parámetro locale pasado en su lugar. Para obtener más información, vea Locale.
Requisitos
Routine | Encabezado necesario |
---|---|
strlen |
<string.h> |
wcslen |
<string.h> o <wchar.h> |
_mbslen , _mbslen_l |
<mbstring.h> |
_mbstrlen , _mbstrlen_l |
<stdlib.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
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) );
// wcslen 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) );
}
Length of 'Count.' : 6
Length of 'Count.' : 6
Length of 'ABCァD' : 5
Length of 'ABCァD' : 5
Bytes in 'ABCァD' : 6
Vea también
Manipulación de cadenas
Interpretación de secuencias de caracteres de varios bytes
Configuración regional
setlocale
, _wsetlocale
strcat
, , wcscat
, _mbscat
strcmp
, , wcscmp
, _mbscmp
Funciones strcoll
strcpy
, , wcscpy
, _mbscpy
strrchr
, wcsrchr
, , _mbsrchr
, _mbsrchr_l
_strset
, _strset_l
, _wcsset
, _wcsset_l
, , _mbsset
, _mbsset_l
strspn
, wcsspn
, , _mbsspn
, _mbsspn_l