strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l
Prende la lunghezza di una stringa, utilizzando le impostazioni locali correnti o le impostazioni locali specificate.Più versioni sicure di queste funzioni sono disponibili, vedere strnlen, strnlen_s, strnlen_l, wcsnlen, wcsnlen_s, wcsnlen_l, _mbsnlen, _mbsnlen_l, _mbstrnlen, _mbstrnlen_l.
Importante |
---|
_mbslen, _mbslen_l, _mbstrlene _mbstrlen_l non possono essere utilizzati nelle applicazioni eseguite nelle finestre runtime.Per ulteriori informazioni, vedere Funzioni CRT non supportate 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
);
Parametri
str
Stringa con terminazione Null.locale
Impostazioni locali da utilizzare.
Valore restituito
Ognuna di queste funzioni restituisce il numero di caratteri in str, escluso il carattere di fine NULL.Nessun valore restituito è utilizzato per indicare un errore, ad eccezione di _mbstrlen, che restituisce ((size_t)(-1)) se la stringa contiene un carattere multibyte non valido.
Note
strlen interpreta la stringa come stringa di caratteri a singolo byte, pertanto il valore restituito è sempre uguale al numero di byte, anche se la stringa contiene caratteri multibyte.wcslen è una versione a caratteri di tipo "wide" di strlen; l'argomento wcslen è una stringa di caratteri di tipo "wide" e il numero di caratteri è in caratteri di tipo "wide" (a due byte).wcslen e strlen si comportano in modo identico in caso contrario.
Nota sulla sicurezza Queste funzioni possono incorrere in un potenziale rischio di sovraccarico del buffer.Problemi di sovraccarico del buffer sono un metodo frequente di attacco al sistema, con conseguente elevazione dei privilegi non autorizzata.Per ulteriori informazioni, vedere Evitare sovraccarichi del buffer.
Mapping di routine a Testo generico
TCHAR.H routine |
_UNICODE & _MBCS non definiti |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tcslen |
strlen |
strlen |
wcslen |
_tcsclen |
strlen |
_mbslen |
wcslen |
_tcsclen_l |
strlen_l |
_mbslen_l |
wcslen_l |
_mbslen,_mbslen_l, _mbstrlene_mbstrlen_l restituisce il numero di caratteri multibyte in una stringa di caratteri multibyte ma non stanno la validità di caratteri multibyte._mbstrlene testdi_mbstrlen_l la validità di caratteri multibyte e riconosce le sequenzesetlocale, _wsetlocaledi caratteri multibyte.Se la stringa passata a _mbstrlen o_mbstrlen_l contiene un carattere multibyte non valido per la tabella codici, restituisce -1 e imposta errno a EILSEQ.
Il valore di output è interessato dall'impostazione dell'impostazione di categoria LC_CTYPE delle impostazioni locali; vedere setlocale per ulteriori informazioni.Le versioni di queste funzioni senza il suffisso _l utilizzano le impostazioni locali correnti per il comportamento dipendente dalle impostazioni locali; le versioni con il suffisso _l sono identiche, ad eccezione del fatto che utilizzano il parametro delle impostazioni locali che viene passato.Per ulteriori informazioni, vedere Impostazioni locali.
Requisiti
Routine |
Intestazione obbligatoria |
---|---|
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> |
Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'introduzione.
Esempio
// 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 .NET Framework
Vedere anche
Riferimenti
Interpretazione delle sequenze di caratteri multibyte
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l