Share via


strerror_s, _strerror_s, _wcserror_s, __wcserror_s

Obtiene un mensaje de error del sistema (strerror_s, _wcserror_s), o imprime un mensaje de error proporcionado por el usuario (_strerror_s, __wcserror_s). Estas funciones son versiones de , , , con__wcserrormejoras de seguridad, como se describe en Características de seguridad de CRT. _wcserror_strerrorstrerror

Sintaxis

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

Parámetros

buffer
Búfer que va a contener la cadena de error.

sizeInBytes
El número de bytes en el búfer.

sizeInWords
Número de palabras del búfer.

errnum
Número de error.

strErrMsg
Mensaje proporcionado por el usuario.

Valor devuelto

Devuelve cero si se ejecuta correctamente; devuelve un código de error si se produce un error.

Condiciones de error

buffer sizeInBytes/sizeInWords strErrMsg Contenido de buffer
NULL cualquiera cualquiera N/D
cualquiera 0 cualquiera no modificado

Comentarios

La función strerror_s es segura para subprocesos.

La función strerror_s asigna errnum a una cadena de mensaje de error, y devuelve la cadena de buffer. _strerror_s no toma el número de error. Usa el valor actual de errno para determinar el mensaje adecuado. El mensaje no se imprime o muestra mediante strerror_s o _strerror_s. Para generar el mensaje, debe llamar a una función de salida como fprintf:

if (( _access( "datafile",2 )) == -1 )
{
   _strerror_s(buffer, 80, NULL);
   fprintf( stderr, buffer );
}

Si strErrMsg es NULL, _strerror_s devuelve una cadena en buffer que contiene el mensaje de error del sistema para la última llamada de biblioteca que produjo un error. Si strErrMsg no es igual a NULL, _strerror_s devuelve una cadena en buffer que contiene (en orden) el mensaje de cadena, dos puntos, un espacio, el mensaje de error del sistema para la última llamada de biblioteca que produjo un error. El mensaje de cadena puede tener, como máximo, 94 caracteres.

Estas funciones truncan el mensaje de error si su longitud supera el tamaño del búfer - 1. La cadena resultante en buffer siempre termina con un valor NULL.

El número de error real de _strerror_s se almacena en la variable errno. Se accede a los mensajes de error del sistema a través de la variable _sys_errlist, que es una matriz de mensajes ordenados por número de error. _strerror_s obtiene acceso al mensaje de error adecuado mediante el valor de errno como índice de la variable _sys_errlist. El valor de la variable _sys_nerr se define como el número máximo de elementos de la _sys_errlist matriz. Para generar resultados precisos, llame inmediatamente _strerror_s después de que se devuelva una rutina de biblioteca con un error. De lo contrario, las llamadas subsiguientes a strerror_s o _strerror_s pueden sobrescribir el valor de errno.

_wcserror_s y __wcserror_s son versiones con caracteres anchos de strerror_s y _strerror_s, respectivamente.

Estas funciones validan sus parámetros. Si el búfer es NULL o si el parámetro de tamaño es 0, se invoca al controlador de parámetros no válidos, como se describe en Validación de parámetros . Si la ejecución puede continuar, las funciones devuelven EINVAL y establecen errno en EINVAL.

_strerror_s, _wcserror_sy __wcserror_s no forman parte de la definición ANSI, sino que son extensiones de Microsoft. No los use donde se desee la portabilidad; para la compatibilidad con ANSI, use strerror_s en su lugar.

En C++, el uso de estas funciones se simplifica mediante sobrecargas de plantilla. Las sobrecargas pueden deducir la longitud del búfer automáticamente, lo que elimina la necesidad de especificar un argumento de tamaño. Para obtener más información, consulte Sobrecargas de plantillas seguras.

Las versiones de la biblioteca de depuración de estas funciones rellenan primero el búfer con 0xFE. Para deshabilitar este comportamiento, use _CrtSetDebugFillThreshold.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Asignaciones de rutinas de texto genérico

Rutina TCHAR.H _UNICODE y _MBCS no definidos _MBCS definido _UNICODE definido
_tcserror_s strerror_s strerror_s _wcserror_s

Requisitos

Routine Encabezado necesario
strerror_s, _strerror_s <string.h>
_wcserror_s, __wcserror_s <string.h> o <wchar.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

Vea el ejemplo de perror.

Consulte también

Manipulación de cadenas
clearerr
ferror
perror, _wperror