strerror_s
, _strerror_s
, _wcserror_s
__wcserror_s
Ottiene un messaggio di errore di sistema (strerror_s
, _wcserror_s
) o stampa un messaggio di errore fornito dall'utente (_strerror_s
, __wcserror_s
). Queste funzioni sono versioni di strerror
, _strerror
, _wcserror
, __wcserror
con miglioramenti della sicurezza, come descritto in Funzionalità di sicurezza in CRT.
Sintassi
errno_t strerror_s(
char *buffer,
size_t sizeInBytes,
int errnum
);
errno_t _strerror_s(
char *buffer,
size_t sizeInBytes,
const char *strErrMsg
);
errno_t _wcserror_s(
wchar_t *buffer,
size_t sizeInWords,
int errnum
);
errno_t __wcserror_s(
wchar_t *buffer,
size_t sizeInWords,
const wchar_t *strErrMsg
);
template <size_t size>
errno_t strerror_s(
char (&buffer)[size],
int errnum
); // C++ only
template <size_t size>
errno_t _strerror_s(
char (&buffer)[size],
const char *strErrMsg
); // C++ only
template <size_t size>
errno_t _wcserror_s(
wchar_t (&buffer)[size],
int errnum
); // C++ only
template <size_t size>
errno_t __wcserror_s(
wchar_t (&buffer)[size],
const wchar_t *strErrMsg
); // C++ only
Parametri
buffer
Buffer contenente la stringa di errore.
sizeInBytes
Numero di byte nel buffer.
sizeInWords
Numero di parole nel buffer.
errnum
Numero di errore.
strErrMsg
Messaggio fornito dall'utente.
Valore restituito
Zero in caso di esito positivo, un codice di errore in caso di esito negativo.
Condizioni di errore
buffer |
sizeInBytes /sizeInWords |
strErrMsg |
Contenuto di buffer |
---|---|---|---|
NULL |
qualsiasi | qualsiasi | n/d |
qualsiasi | 0 | qualsiasi | non modificato |
Osservazioni:
La strerror_s
funzione è thread-safe.
La funzione strerror_s
esegue il mapping di errnum
a una stringa di messaggio di errore, restituendo la stringa in buffer
. _strerror_s
non accetta il numero di errore, ma usa il valore corrente di errno
per determinare il messaggio appropriato. Il messaggio non viene stampato o visualizzato da strerror_s
o _strerror_s
. Per restituire il messaggio, è necessario chiamare una funzione di output, fprintf
ad esempio :
if (( _access( "datafile",2 )) == -1 )
{
_strerror_s(buffer, 80, NULL);
fprintf( stderr, buffer );
}
Se strErrMsg
è NULL
, _strerror_s
restituisce una stringa in buffer
che contiene il messaggio di errore di sistema per l'ultima chiamata di libreria che ha generato un errore. Se strErrMsg
non è uguale a NULL
, restituisce _strerror_s
una stringa in buffer
che contiene (in ordine) il messaggio stringa, i due punti, uno spazio, il messaggio di errore di sistema per l'ultima chiamata di libreria che ha generato un errore. La lunghezza massima consentita del messaggio stringa è pari a 94 caratteri.
Queste funzioni troncano il messaggio di errore se la lunghezza supera le dimensioni del buffer - 1. La stringa risultante in buffer
è sempre con terminazione Null.
Il numero di errore effettivo per _strerror_s
viene archiviato nella variabile errno
. I messaggi di errore di sistema sono accessibili tramite la variabile _sys_errlist
, ovvero una matrice di messaggi ordinati in base al numero di errore. _strerror_s
accede al messaggio di errore appropriato usando il valore errno
come indice per la variabile _sys_errlist
. Il valore della variabile _sys_nerr
viene definito come numero massimo di elementi nella _sys_errlist
matrice. Per produrre risultati accurati, chiamare _strerror_s
immediatamente dopo che una routine di libreria restituisce un errore. In caso contrario, le chiamate successive a strerror_s
o _strerror_s
possono sovrascrivere il valore errno
.
_wcserror_s
e __wcserror_s
sono versioni a caratteri wide di strerror_s
e _strerror_s
rispettivamente.
Queste funzioni convalidano i relativi parametri. Se il buffer è NULL
o se il parametro size è 0, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri . Se l'esecuzione può continuare, le funzioni restituiscono EINVAL
e impostano errno
su EINVAL
.
_strerror_s
, _wcserror_s
e __wcserror_s
non fanno parte della definizione ANSI, ma sono invece estensioni Microsoft. Non usarle dove si desidera la portabilità; per la compatibilità ANSI, usare strerror_s
invece .
In C++ l'uso di queste funzioni è semplificato dagli overload dei modelli. Gli overload possono dedurre la lunghezza del buffer automaticamente, eliminando la necessità di specificare un argomento di dimensione. Per altre informazioni, vedere Proteggere gli overload dei modelli.
Le versioni della libreria di debug di queste funzioni riempiono prima di tutto il buffer con 0xFE. Per disabilitare questo comportamento, usare _CrtSetDebugFillThreshold
.
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
Routine TCHAR.H | _UNICODE e _MBCS non definito |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tcserror_s |
strerror_s |
strerror_s |
_wcserror_s |
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
strerror_s , _strerror_s |
<string.h> |
_wcserror_s , __wcserror_s |
<string.h> o <wchar.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
Vedere l'esempio per perror
.
Vedi anche
Manipolazione delle stringhe
clearerr
ferror
perror
, _wperror