strlen
, , wcslen
, _mbslen_l
_mbslen
, , _mbstrlen
_mbstrlen_l
Obtient la longueur d'une chaîne en utilisant les paramètres régionaux actifs ou des paramètres régionaux spécifiés. Des versions plus sécurisées de ces fonctions sont disponibles ; voir strnlen
, , strnlen_s
, wcsnlen_s
wcsnlen
, _mbsnlen
, _mbsnlen_l
, , _mbstrnlen
_mbstrnlen_l
Important
Les fonctions _mbslen
, _mbslen_l
, _mbstrlen
et _mbstrlen_l
ne peuvent pas être utilisées dans les applications qui s'exécutent dans le Windows Runtime. Pour plus d’informations, consultez Fonctions CRT non prises en charge dans les applications de la plateforme Windows universelle.
Syntaxe
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
);
Paramètres
str
Chaîne terminée par un caractère Null.
locale
Paramètres régionaux à utiliser.
Valeur retournée
Chacune de ces fonctions retourne le nombre de caractères dans str
, à l’exclusion de la valeur null du terminal. Aucune valeur de retour n'est réservée pour indiquer une erreur, sauf pour _mbstrlen
et _mbstrlen_l
, qui retournent ((size_t)(-1))
si la chaîne contient un caractère multioctets non valide.
Notes
strlen
interprète la chaîne comme une chaîne de caractères codés sur un octet ; sa valeur de retour est donc toujours égale au nombre d'octets, même si la chaîne contient des caractères multioctets. wcslen
est une version à caractères larges de strlen
; l'argument de wcslen
est une chaîne de caractères larges et le nombre de caractères s'entend en caractères larges (codés sur deux octets). Sinon,wcslen
et strlen
se comportent de la même façon.
Remarque relative à la sécurité Ces fonctions sont exposées à une menace potentielle liée à un problème de dépassement de mémoire tampon. Les dépassements de mémoire tampon sont une méthode fréquente d'attaque du système, ce qui provoque une élévation des privilèges injustifiée. Pour plus d’informations, consultez Solutions contre les dépassements de mémoire tampon.
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Mappages de routines de texte générique
Routine TCHAR.H |
_UNICODE et _MBCS non définis |
_MBCS défini |
_UNICODE défini |
---|---|---|---|
_tcslen |
strlen |
strlen |
wcslen |
_tcsclen |
strlen |
_mbslen |
wcslen |
_tcsclen_l |
strlen |
_mbslen_l |
wcslen |
_mbslen
et _mbslen_l
renvoyer le nombre de caractères multioctets dans une chaîne de caractères multioctets, mais ils ne testent pas la validité de caractères multioctets. _mbstrlen
et _mbstrlen_l
testent la validité des caractères multioctets et reconnaissent les séquences de caractères multioctets. Si la chaîne passée à _mbstrlen
ou _mbstrlen_l
contient un caractère multioctets non valide pour la page de code, la fonction retourne -1 et affecte à errno
la valeur EILSEQ
.
La valeur de la sortie est affectée par la valeur du paramètre de la catégorie LC_CTYPE
des paramètres régionaux. Pour plus d’informations, consultez setlocale
. Les versions de ces fonctions sans le suffixe _l
utilisent les paramètres régionaux pour ce comportement dépendant des paramètres régionaux ; les versions avec le suffixe _l
sont identiques, sauf qu'elles utilisent à la place les paramètres régionaux transmis. Pour plus d’informations, consultez Locale.
Spécifications
Routine | En-tête requis |
---|---|
strlen |
<string.h> |
wcslen |
<string.h> ou <wchar.h> |
_mbslen , _mbslen_l |
<mbstring.h> |
_mbstrlen , _mbstrlen_l |
<stdlib.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
// 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
Voir aussi
Manipulation de chaînes
Interprétation des séquences de caractères multioctets
Paramètres régionaux
setlocale
, _wsetlocale
strcat
, , wcscat
_mbscat
strcmp
, , wcscmp
_mbscmp
strcoll
, fonctions
strcpy
, , wcscpy
_mbscpy
strrchr
, , wcsrchr
_mbsrchr
, ,_mbsrchr_l
_strset
, , _strset_l
, _wcsset_l
_wcsset
, , _mbsset
_mbsset_l
strspn
, , wcsspn
_mbsspn
, ,_mbsspn_l