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 );
}
如果 strErrMsg
為 NULL
, _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
的範例。