Condividi tramite


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, fprintfad 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_se __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