strerror_s, _strerror_s, _wcserror_s, __wcserror_s

取得系統錯誤訊息 (strerror_s_wcserror_s),或列印使用者提供的錯誤訊息 (_strerror_s__wcserror_s)。 這些函式是 、 _wcserror_strerror 、 的版本 strerror__wcserror 具有 CRT 中安全性功能中所述 的安全性增強功能。

語法

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

參數

buffer
要保存錯誤字串的緩衝區。

sizeInBytes
緩衝區中的位元組數目。

sizeInWords
緩衝區中的字數。

errnum
錯誤號碼。

strErrMsg
使用者提供的訊息。

傳回值

如果成功,則為零,如果失敗,則為錯誤碼。

錯誤條件

buffer sizeInBytes/sizeInWords strErrMsg buffer 的內容。
NULL 任意 任意 n/a
任意 0 任意 未修改

備註

strerror_s 式是安全線程。

strerror_s 函式會將 errnum 對應至錯誤訊息字串,並傳回 buffer 中的字串。 _strerror_s 不接受錯誤號碼,而是使用 errno 的目前值來判斷適當的訊息。 訊息不會由 strerror_s_strerror_s 列印或顯示。 若要輸出訊息,您必須呼叫輸出函式,例如 fprintf

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

如果 strErrMsgNULL_strerror_s 則傳回 中的 buffer 字串,其中包含產生錯誤之最後一個程式庫呼叫的系統錯誤訊息。 如果 strErrMsg 不等於 NULL ,則會 _strerror_s 傳回包含 buffer 字串訊息、冒號、空格、最後一個產生錯誤的程式庫呼叫系統錯誤訊息的字串。。 您的字串訊息最多可以是 94 個字元長度。

如果錯誤訊息的長度超過緩衝區的大小 - 1,則這些函式會截斷錯誤訊息。 buffer 中所產生的字串一律會以 Null 結束。

的實際錯誤號碼 _strerror_s 會儲存在 變數 errno 中。 系統會透過 變數 _sys_errlist 存取系統錯誤訊息,這是依錯誤號碼排序的訊息陣列。 _strerror_s 會使用 errno 值作為變數 _sys_errlist 的索引,來存取適當的錯誤訊息。 變數 _sys_nerr 的值會定義為數組中 _sys_errlist 專案數目上限。 若要產生精確的結果,請在程式庫常式傳回後立即呼叫 _strerror_s ,並出現錯誤。 否則,後續呼叫 strerror_s_strerror_s 就可能會覆寫 errno 值。

_wcserror_s__wcserror_s 分別是寬字元版本的 strerror_s_strerror_s

這些函式會驗證它們的參數。 如果 buffer 是 NULL 或如果 size 參數為 0,則會叫用不正確參數處理常式,如參數驗證 中所述 。 如果允許繼續執行,這些函式會傳回 EINVAL,並將 errno 設定為 EINVAL

_strerror_s_wcserror_s__wcserror_s 不是 ANSI 定義的一部分,而是 Microsoft 擴充功能。 請勿在需要可攜性的地方使用它們;若為 ANSI 相容性,請改用 strerror_s

在 C++ 中,使用這些函式已透過範本多載簡化;多載可自動推斷緩衝區長度,因而不需要指定大小引數。 如需詳細資訊,請參閱 保護範本多載

這些函式的偵錯程式庫版本會先將緩衝區填入0xFE。 若要停用此行為,請使用 _CrtSetDebugFillThreshold

根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。

泛型文字常式對應

TCHAR.H 常式 _UNICODE_MBCS 未定義 _MBCS 定義 _UNICODE 定義
_tcserror_s strerror_s strerror_s _wcserror_s

需求

常式 必要的標頭
strerror_s, _strerror_s <string.h>
_wcserror_s, __wcserror_s <string.h > 或 < wchar.h>

如需相容性詳細資訊,請參閱相容性

範例

請參閱 的 perror 範例。

另請參閱

字串操作
clearerr
ferror
perror, _wperror