strerror
, _strerror
, _wcserror
, __wcserror
取得系統錯誤訊息字串 (strerror
、_wcserror
),或是將使用者提供的錯誤訊息字串格式化 (_strerror
、__wcserror
)。 這些函式有更安全的版本可供使用;請參閱 、、 _wcserror_s
_strerror_s
、 __wcserror_s
。 strerror_s
語法
char * strerror(
int errnum );
char * _strerror(
const char *strErrMsg );
wchar_t * _wcserror(
int errnum );
wchar_t * __wcserror(
const wchar_t *strErrMsg );
參數
errnum
錯誤號碼。
strErrMsg
使用者提供的訊息。
傳回值
所有這些函式都會在執行時間所擁有的執行緒本機儲存體緩衝區中,傳回錯誤訊息字串的指標。 稍後在同一個執行緒上的呼叫可以覆寫此字串。
備註
strerror
函式會將 errnum
對應至錯誤訊息字串,並傳回字串的指標。 和 _strerror
函 strerror
式實際上不會列印訊息。 若要列印,請呼叫輸出函式,例如 fprintf
:
if (( _access( "datafile", 2 )) == -1 )
fprintf( stderr, _strerror(NULL) );
如果 strErrMsg
傳遞為 NULL
, _strerror
則會傳回字串的指標。 它包含產生錯誤之最後一個程式庫呼叫的系統錯誤訊息。 如果您呼叫 __wcserror
,錯誤訊息字串會以分行符號 ( '\n'
) 終止。 其他函式不會新增 '\n'
。 當 不是 NULL
時 strErrMsg
,字串會依序包含:您的 strErrMsg
字串、冒號、空格、系統錯誤訊息。 您的字串訊息最多可以有 94 個字元,以窄字元或 _strerror
寬字元 __wcserror
為單位。
的實際錯誤號碼 _strerror
會儲存在 變數 errno
中。 若要產生精確的結果,請在程式庫常式傳回錯誤之後立即呼叫 _strerror
。 否則,稍後對程式庫常式的呼叫可能會覆寫 errno
值。
_wcserror
和 __wcserror
分別是寬字元版本的 strerror
和 _strerror
。
_strerror
、 _wcserror
和 __wcserror
是 Microsoft 特定的,不是標準 C 程式庫的一部分。 建議您不要在想要可攜式程式碼的地方使用這些程式碼。 針對標準 C 相容性,請改用 strerror
。
若要取得錯誤字串,我們建議 strerror
或 _wcserror
取代已被取代的 _sys_errlist
宏,以及 _sys_nerr
已被取代的內部 __sys_errlist
函式和 __sys_nerr
。
根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。
泛型文字常式對應
TCHAR.H 常式 | _UNICODE 和 _MBCS 未定義 |
_MBCS 定義 |
_UNICODE 定義 |
---|---|---|---|
_tcserror |
strerror |
strerror |
_wcserror |
需求
常式 | 必要的標頭 |
---|---|
strerror |
<string.h> |
_strerror |
<string.h> |
_wcserror , __wcserror |
<string.h> |
如需相容性詳細資訊,請參閱相容性。
範例
請參閱 的 perror
範例。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應