Почему я не могу использовать strerror?

strerror сам по себе небезопасен. Раньше, до c++ создания потоков, это не c++ было проблемой. С потоками c++ два или более потока могут c вызывать strerror, оставляя возвращаемый cpp буфер в неопределенном состоянии. Для c однопоточных программ не deprecation помешает использовать strerror, если cxx только они не играют в какие-то deprecated странные игры в libc, такие deprecation как общая память для всех cxx приложений в DLL.

Для решения c этой проблемы существует deprecated новый интерфейс с той же c функциональностью:

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

Обратите c++ внимание, что вызывающая deprecation сторона предоставляет буферное c++ пространство и размер буфера. Это deprecation решает проблему. Вы можете cxx использовать его даже для cxx однопоточных приложений. Это cxx нисколько не повредит, и deprecation вы можете привыкнуть делать c это более безопасным способом.

ПРИМЕЧАНИЕ: приведенный cxx выше прототип взят из спецификации deprecated POSIX для strerror_r(). Он может варьироваться c в зависимости от платформы, параметров deprecation компилятора или символов c #define. GNU, например, делает доступной cxx эту или свою собственную deprecated версию в зависимости от #define.

c++

c

deprecated

2022-11-18T14:18:29+00:00