strnlen, strnlen_s, strnlen_l, wcsnlen, wcsnlen_s, wcsnlen_l, _mbsnlen, _mbsnlen_l, _mbstrnlen, _mbstrnlen_l
Ottiene la lunghezza di una stringa utilizzando le impostazioni locali correnti o quella che è stata passata.Questi sono più versioni sicure di strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l.
Importante |
---|
_mbsnlen, _mbsnlen_l, _mbstrnlene _mbstrnlen_l non possono essere utilizzati nelle applicazioni eseguite in Windows Runtime.Per ulteriori informazioni, vedere Funzioni CRT non supportate con /ZW. |
size_t strnlen(
const char *str,
size_t numberOfElements
);
size_t strnlen_s(
const char *str,
size_t numberOfElements
);
size_t strnlen_l(
const char *str,
size_t numberOfElements,
_locale_t locale
);
size_t wcsnlen(
const wchar_t *str,
size_t numberOfElements
);
size_t wcsnlen_s(
const wchar_t *str,
size_t numberOfElements
);
size_t wcsnlen_l(
const wchar_t *str,
size_t numberOfElements,
_locale_t locale
);
size_t _mbsnlen(
const unsigned char *str,
size_t numberOfElements
);
size_t _mbsnlen_l(
const unsigned char *str,
size_t numberOfElements,
_locale_t locale
);
size_t _mbstrnlen(
const char *str,
size_t numberOfElements
);
size_t _mbstrnlen_l(
const char *str,
size_t numberOfElements,
_locale_t locale
);
Parametri
str
Stringa con terminazione Null.numberOfElements
La dimensione del buffer di stringa.locale
Impostazioni locali da utilizzare.
Valore restituito
Queste funzioni restituiscono il numero di caratteri della stringa, escluso il carattere di terminazione null.Se non è presente un terminatore null all'interno del primo byte di numberOfElements stringa (o i caratteri di tipo " wide " per wcsnlen), quindi numberOfElements viene restituito per indicare la condizione di errore, le stringhe con terminazione null hanno lunghezze che vengono rigorosamente minore di numberOfElements.
_mbstrnlen e _mbstrnlen_l restituiscono -1 se la stringa contiene un carattere multibyte non valido.
Note
[!NOTA]
strnlen non sostituisce per strlen; strnlen deve essere utilizzato solo per calcolare la dimensione dei dati non attendibili in ingresso in un buffer del noto di di, ad esempio un pacchetto di rete.strnlen calcola la lunghezza ma non viene eseguito oltre la fine del buffer se la stringa è non terminata.Per altre situazioni, utilizzare strlen.(Lo stesso viene applicato a wcsnlen, a _mbsnlene a _mbstrnlen).
Ognuna di queste funzioni restituisce il numero di caratteri in str, escluso il carattere di terminazione null.Tuttavia, strnlen e strnlen_l come interpretare la stringa come stringa di caratteri a byte singolo, pertanto il valore restituito è sempre uguale al numero di byte, anche se la stringa contiene caratteri multibyte.wcsnlen e wcsnlen_l disponibili versioni a caratteri estesi di strnlen e di strnlen_l rispettivamente, gli argomenti per wcsnlen e wcsnlen_l sono stringhe di caratteri estesi e il numero di caratteri in unità a caratteri estesi.In caso contrario, wcsnlen, wcsnlen_l, strnlen e strnlen_l si comportano in modo identico.
strnlen, wcsnlen, e _mbsnlen non convalidano i relativi parametri.Se str è NULL, una violazione di accesso si verifica.
strnlen_s e wcsnlen_s convalidano i relativi parametri.Se str è NULL, tornare 0 di funzioni.
_mbstrnlen anche convalida dei parametri.Se str è NULL, o se numberOfElements è maggiore di INT_MAX, _mbstrnlen generato un'eccezione non valida di parametro, come descritto in Convalida dei parametri.Se l'esecuzione è consentita per continuare, _mbstrnlen imposta errno a EINVAL e restituisce -1.
Mapping di routine a Testo generico
TCHAR.H routine |
_UNICODE & _MBCS non definiti |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tcsnlen |
strnlen |
strnlen |
wcsnlen |
_tcscnlen |
strnlen |
_mbsnlen |
wcsnlen |
_tcscnlen_l |
strnlen_l |
_mbsnlen_l |
wcsnlen_l |
_mbsnlen e _mbstrnlen restituisce il numero di caratteri multibyte in una stringa di caratteri multibyte._mbsnlen riconosce le sequenze di caratteri multibyte in base alla tabella codici multibyte attualmente utilizzata o seconda delle impostazioni locali passate in; non stanno la validità di caratteri multibyte.i test di_mbstrnlen la validità di caratteri multibyte e riconosce le sequenze di caratteri multibyte.Se la stringa passata a _mbstrnlen contiene un carattere multibyte non valido, errno è impostato su EILSEQ.
Il valore di output è interessato dall'impostazione dell'impostazione di categoria di LC_CTYPE delle impostazioni locali; vedere setlocale, _wsetlocale per ulteriori informazioni.Le versioni di queste funzioni sono identiche, eccetto quelli che non dispongano dell'utilizzo di _l le impostazioni locali correnti per questo comportamento dipendente dalle impostazioni locali e le versioni che hanno il suffisso di _l utilizzare invece il parametro delle impostazioni locali passato.Per ulteriori informazioni, vedere Impostazioni locali.
Requisiti
Routine |
Intestazione obbligatoria |
---|---|
strnlen, strnlen_s, strnlen_l |
<string.h> |
wcsnlen, wcsnlen_s, wcsnlen_l |
<string.h> o <wchar.h> |
_mbsnlen, _mbsnlen_l |
<mbstring.h> |
_mbstrnlen, _mbstrnlen_l |
<stdlib.h> |
Per informazioni aggiuntive di compatibilità, vedere Compatibilità.
Esempio
// crt_strnlen.c
#include <string.h>
int main()
{
// str1 is 82 characters long. str2 is 159 characters long
char* str1 = "The length of a string is the number of characters\n"
"excluding the terminating null.";
char* str2 = "strnlen takes a maximum size. If the string is longer\n"
"than the maximum size specified, the maximum size is\n"
"returned rather than the actual size of the string.";
size_t len;
size_t maxsize = 100;
len = strnlen(str1, maxsize);
printf("%s\n Length: %d \n\n", str1, len);
len = strnlen(str2, maxsize);
printf("%s\n Length: %d \n", str2, len);
}
Equivalente .NET Framework
Vedere anche
Riferimenti
Interpretazione delle sequenze di caratteri multibyte
strncat, _strncat_l, wcsncat, wcsncat_l, _mbsncat _mbsncat_l
strncmp, wcsncmp, _mbsncmp, _mbsncmp_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l