| Functions | |||||||||||||||||||||||||||||||||||||||||
| Character manipulation | |||||||||||||||||||||||||||||||||||||||||
| Conversions to and from numeric formats | |||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||
| String manipulation | |||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||
| String examination | |||||||||||||||||||||||||||||||||||||||||
| Memory manipulation | |||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||
| Miscellaneous | |||||||||||||||||||||||||||||||||||||||||
strerrorstrerror_sstrerrorlen_s (C11)(C11) | |||||||||||||||||||||||||||||||||||||||||
Defined in header <string.h> | ||
char* strerror(int errnum); | (1) | |
errno_t strerror_s(char*buf, rsize_t bufsz, errno_t errnum); | (2) | (since C11) |
size_t strerrorlen_s( errno_t errnum); | (3) | (since C11) |
errnum, identical to the description that would be printed byperror().errnum is usually acquired from theerrno variable, however the function accepts any value of typeint. The contents of the string are locale-specific.strerror function.strerror is not required to be thread-safe. Implementations may be returning different pointers to static read-only string literals or may be returning the same pointer over and over, pointing at a static buffer in which strerror places the string.buf. No more thanbufsz-1 bytes are written, the buffer is always null-terminated. If the message had to be truncated to fit the buffer andbufsz is greater than 3, then onlybufsz-4 bytes are written, and the characters"..." are appended before the null terminator. In addition, the following errors are detected at runtime and call the currently installedconstraint handler function:buf is a null pointerbufsz is zero or greater thanRSIZE_MAXbuf occurs past the end of the array, which can happen when the size of the buffer pointed to bybuf is less than the number of characters in the error message which in turn is less thanbufsz.strerror_s would write if it were called witherrnum. The length does not include the null terminator.strerror_s andstrerrorlen_s are only guaranteed to be available if__STDC_LIB_EXT1__ is defined by the implementation and if the user defines__STDC_WANT_LIB_EXT1__ to the integer constant1 before including<string.h>.Contents |
| errnum | - | integral value referring to an error code |
| buf | - | pointer to a user-provided buffer |
| bufsz | - | size of the user-provided buffer |
buf, non-zero otherwise.strerror_s would returnPOSIX allows subsequent calls tostrerror to invalidate the pointer value returned by an earlier call. It also specifies that it is theLC_MESSAGES locale facet that controls the contents of these messages.
strerror_s is the only bounds-checked function that allows truncation, because providing as much information as possible about a failure was deemed to be more desirable. POSIX also definesstrerror_r for similar purposes.
#define __STDC_WANT_LIB_EXT1__ 1#include <stdio.h>#include <errno.h>#include <string.h>#include <locale.h> int main(void){FILE*fp=fopen(tmpnam((char[L_tmpnam]){0}),"r");if(fp==NULL){printf("File opening error: %s\n", strerror(errno));setlocale(LC_MESSAGES,"de_DE.utf8");printf("Now in German: %s\n", strerror(errno));#ifdef __STDC_LIB_EXT1__setlocale(LC_ALL,"ja_JP.utf8");// printf needs CTYPE for multibyte outputsize_t errmsglen= strerrorlen_s(errno)+1;char errmsg[errmsglen]; strerror_s(errmsg, errmsglen,errno);printf("Now in Japanese: %s\n", errmsg);#endif}}
Possible output:
File opening error: No such file or directoryNow in German: Datei oder Verzeichnis nicht gefundenNow in Japanese: そのようなファイル、又はディレクトリはありません
| displays a character string corresponding of the current error tostderr (function)[edit] | |
| macro which expands to POSIX-compatible thread-local error number variable (macro variable)[edit] | |
C++ documentation forstrerror | |