strerror_s、 _strerror_s、 _wcserror_s、 __wcserror_s

取得系統的錯誤訊息 (strerror_s, _wcserror_s)] 或 [列印使用者提供的錯誤訊息 (_strerror_s, __wcserror_s)。這些是舊版strerror、 _strerror、 _wcserror、 __wcserror中所述的安全性增強功能與安全性功能,則在 CRT 中

errno_t strerror_s(
   char *buffer,
   size_t numberOfElements,
   int errnum 
);
errno_t _strerror_s(
   char *buffer,
   size_t numberOfElements,
   const char *strErrMsg 
);
errno_t _wcserror_s(
   wchar_t *buffer,
   size_t numberOfElements,
   int errnum 
);
errno_t __wcserror_s(
   wchar_t *buffer,
   size_t numberOfElements,
   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
    若要保留的錯誤字串的緩衝區。

  • numberOfElements
    緩衝區的大小。

  • errnum
    錯誤代碼。

  • strErrMsg
    使用者提供的訊息。

傳回值

零,如果執行成功、 失敗的錯誤代碼。

錯誤 Condtions

buffer

numberOfElements

strErrMsg

內容buffer

NULL

任何

任何

N/A

任何

0

任何

不能修改

備註

strerror_s函式對應errnum為錯誤訊息字串,傳回的字串指標。_strerror_s不接受錯誤代碼。 它會使用目前的值errno來決定適當的訊息。既不strerror_s或_strerror_s實際上會列印訊息: 您需要為此,例如呼叫函式輸出 fprintf

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

如果strErrMsg是NULL, _strerror_s字串,包含系統的錯誤訊息,以產生錯誤的最後一個程式庫呼叫傳回的指標。新行字元 ('\n') 便會終止的錯誤訊息字串。如果strErrMsg不等於NULL,然後_strerror_s字串,包含 (依順序) 字串訊息、 冒號、 一個空格、 系統的錯誤訊息,以產生錯誤,並且新行字元的最後一個程式庫呼叫傳回的指標。字串訊息可以是,一般而言,94 個字元。

這些函式會截斷的錯誤訊息,如果其長度超過numberOfElements -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,分別。

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

_strerror_s, _wcserror_s,與__wcserror_s 並不屬於 ANSI 定義,而是 Microsoft 擴充功能。請勿將其位置必要的可攜性 ; 為 ANSI 相容性,請使用 strerror_s 相反。

在 C++ 中,使用這些函式已經過簡化的樣板的多載 ; 多載可以緩衝區長度自動推斷,而不必指定 size 引數。如需詳細資訊,請參閱 安全範本多載

這些函式的偵錯版本第一次填滿與 0xFD 的緩衝區。若要停用這種情形,請使用_CrtSetDebugFillThreshold

泛用文字常式對應

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

.NET Framework 對等用法

System::Exception::Message

請參閱

參考

字串操作 (CRT)

clearerr

ferror

perror _wperror