strlen, wcslen, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l

 

Pour obtenir la dernière documentation sur Visual Studio 2017 RC, consultez Documentation Visual Studio 2017 RC.

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. consultez la page strnlen, strnlen_s, wcsnlen, wcsnlen_s, _mbsnlen, _mbsnlen_l, _mbstrnlen, _mbstrnlen_l

System_CAPS_ICON_important.jpg 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 avec /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  
);  

Paramètres

str
Chaîne terminée par un caractère Null.

locale
Paramètres régionaux à utiliser.

Chacune de ces fonctions retourne le nombre de caractères contenus dans str, à l'exclusion du NULL 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.

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.

Note de sécurité ces fonctions sont exposées à une menace potentielle liée à un problème de saturation 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.

Mappages de routines de texte générique

Routine TCHAR.H_UNICODE et _MBCS non définis_MBCS défini_UNICODE défini
_tcslenstrlenstrlenwcslen
_tcsclenstrlen_mbslenwcslen
_tcsclen_lstrlen_mbslen_lwcslen

Les fonctions _mbslen et _mbslen_l retournent le nombre de caractères multioctets contenus dans une chaîne de caractères multioctets, mais elles ne sont pas soumises au test de validité des 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 sortie est affectée par la définition de la LC_CTYPE catégorie de paramètres régionaux ; consultez setlocale pour plus d’informations. 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.

RoutineEn-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é, voir Compatibilité.

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

Length of 'Count.' : 6  
Length of 'Count.' : 6  
Length of 'ABCァD' : 5  
Length of 'ABCァD' : 5  
Bytes in 'ABCァD' : 6  

System::String::Length

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, _wcsset_l, _mbsset, _mbsset_l
strspn, wcsspn, _mbsspn, _mbsspn_l

Afficher: