strnlen
, strnlen_s
, wcsnlen
, wcsnlen_s
_mbsnlen
, _mbsnlen_l
, , _mbstrnlen
_mbstrnlen_l
Ottiene la lunghezza di una stringa, usando le impostazioni locali correnti o quelle che sono state passate. Queste funzioni sono versioni più sicure di strlen
, wcslen
, _mbslen
, _mbslen_l
, _mbstrlen
, _mbstrlen_l
.
Importante
_mbsnlen
, _mbsnlen_l
, _mbstrnlen
e _mbstrnlen_l
non possono essere usati nelle applicazioni eseguite in Windows Runtime. Per altre informazioni, vedere Funzioni CRT non supportate nelle app della piattaforma UWP (Universal Windows Platform).
Sintassi
size_t strnlen(
const char *str,
size_t numberOfElements
);
size_t strnlen_s(
const char *str,
size_t numberOfElements
);
size_t wcsnlen(
const wchar_t *str,
size_t numberOfElements
);
size_t wcsnlen_s(
const wchar_t *str,
size_t numberOfElements
);
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
Dimensione del buffer di stringa.
locale
Impostazioni locali da usare.
Valore restituito
Queste funzioni restituiscono il numero di caratteri nella stringa, escluso il valore null finale. Se non è presente alcun carattere di terminazione Null entro i primi numberOfElements
byte della stringa (o caratteri wide per wcsnlen
), numberOfElements
viene restituito per indicare la condizione di errore. Le stringhe con terminazione Null hanno lunghezze rigorosamente minori di numberOfElements
.
_mbstrnlen
e _mbstrnlen_l
restituiscono -1 se la stringa contiene un carattere multibyte non valido.
Osservazioni:
Nota
strnlen
non è un sostituto di strlen
; strnlen
è pensato per essere usato solo per il calcolo della dimensione dei dati non attendibili entranti in un buffer di dimensione nota, ad esempio un pacchetto di rete. strnlen
calcola la lunghezza ma non oltrepassa la fine del buffer se la stringa è priva di terminazione. In situazioni di altro tipo, usare strlen
(lo stesso vale per wcsnlen
, _mbsnlen
e _mbstrnlen
).
Ognuna di questa funzioni restituisce il numero di caratteri in str
, escluso il carattere null di terminazione. Tuttavia, strnlen
e strnlen_s
interpretano la stringa come stringa di caratteri a byte singolo, per cui il valore restituito sarà sempre uguale al numero di byte, anche se la stringa contiene caratteri multibyte. wcsnlen
e wcsnlen_s
sono versioni a caratteri wide di strnlen
e strnlen_s
rispettivamente. Gli argomenti per wcsnlen
e wcsnlen_s
sono stringhe a caratteri wide e il numero di caratteri è espresso in unità a caratteri wide. Per il resto, wcsnlen
e strnlen
si comportano in modo identico, come strnlen_s
e wcsnlen_s
.
strnlen
, wcsnlen
e _mbsnlen
non convalidano i relativi parametri. Se str
è NULL
, si verifica una violazione di accesso.
strnlen_s
e wcsnlen_s
convalidano i propri parametri. Se str
è NULL
, le funzioni restituiscono 0.
Anche _mbstrnlen
convalida i propri parametri. Se str
è o se numberOfElements
è NULL
maggiore di INT_MAX
, _mbstrnlen
genera un'eccezione di parametro non valida, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, _mbstrnlen
imposta errno
su EINVAL
e restituisce -1.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Mapping di routine di testo generico
TCHAR.H routine |
_UNICODE e _MBCS non definito |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tcsnlen |
strnlen |
strnlen |
wcsnlen |
_tcscnlen |
strnlen |
_mbsnlen |
wcsnlen |
_tcscnlen_l |
strnlen |
_mbsnlen_l |
wcsnlen |
_mbsnlen
e _mbstrnlen
restituiscono 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 in uso o in base alle impostazioni locali passate; non verifica la validità dei caratteri multibyte. _mbstrnlen
testa la validità dei caratteri multibyte e riconosce le sequenze di caratteri multibyte. Se la stringa passata a _mbstrnlen
contiene un carattere multibyte non valido, errno
viene impostato su EILSEQ
.
Il valore di output è interessato dall'impostazione dell'impostazione LC_CTYPE
della categoria delle impostazioni locali. Per ulteriori informazioni, vedere setlocale
. Le versioni di queste funzioni sono identiche, tranne per il fatto che quelle prive del suffisso _l
usano le impostazioni locali correnti per questo comportamento dipendente dalle impostazioni locali e le versioni con il suffisso _l
usano il parametro delle impostazioni locali passato. Per altre informazioni, vedere Locale.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
strnlen , strnlen_s |
<string.h> |
wcsnlen , wcsnlen_s |
<string.h> oppure <wchar.h> |
_mbsnlen , _mbsnlen_l |
<mbstring.h> |
_mbstrnlen , _mbstrnlen_l |
<stdlib.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (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);
}
The length of a string is the number of characters
excluding the terminating null.
Length: 82
strnlen takes a maximum size. If the string is longer
than the maximum size specified, the maximum size is
returned rather than the actual size of the string.
Length: 100
Vedi anche
Manipolazione delle stringhe
impostazioni locali
Interpretazione di sequenze di caratteri multibyte
setlocale
, _wsetlocale
strncat
, _strncat_l
, wcsncat
, _wcsncat_l
, _mbsncat
_mbsncat_l
strncmp
, wcsncmp
, _mbsncmp
_mbsncmp_l
Funzioni strcoll
strncpy_s
, _strncpy_s_l
, wcsncpy_s
, _wcsncpy_s_l
, _mbsncpy_s
_mbsncpy_s_l
strrchr
, wcsrchr
, _mbsrchr
_mbsrchr_l
_strset
, _strset_l
, _wcsset
, _wcsset_l
, _mbsset
_mbsset_l
strspn
, wcsspn
, _mbsspn
_mbsspn_l