2
char *strerror_r(int errnum, char *buf, size_t buflen);

これらのbuf/buflenパラメータは何のためですか?

空のバッファは魅力のように機能します:

char* buf = nullptr;
fprintf(stderr, strerror_r(errno, buf, 0));

また、このバッファは未使用のように見えます:

char buf[1024];
fprintf(stderr, "%s\n", strerror_r(errno, buf, sizeof buf)); // Correct message here
fprintf(stderr, "%s\n", buf); // Empty
4

2 に答える 2

3

man ページからの引用、強調鉱山

GNU 固有strerror_r()は、エラー メッセージを含む文字列へのポインターを返します。これは、関数が に格納する文字列へのbufポインタ、または何らかの (不変の) 静的文字列へのポインタ(この場合bufは未使用)のいずれかです。

そのため、未使用のままである可​​能性が非常に高く、未使用のbuf場合は問題ありません。bufbuflen

[....]関数が に文字列を格納する場合、buf格納されるのは最大バイト数です (文字列が小さすぎて不明なbuflen場合は切り捨てられる可能性があります)。[...]buflenerrnum

于 2016-12-30T05:45:19.667 に答える