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。