Старение кода
Здравствуйте. Компилятор майкрософт ругается на функцию itoa()
, что она устарела, хотя работает на всех компиляторах одинаково хорошо. Я знаю, что у неё есть аналог под с99, но все же. Объясните причину этого предупреждения.
Здравствуйте. Компилятор майкрософт ругается на функцию itoa()
, что она устарела, хотя работает на всех компиляторах одинаково хорошо. Я знаю, что у неё есть аналог под с99, но все же. Объясните причину этого предупреждения.
Старые версии майкрософтовского компилятора C клали на стандарты, придуманные не Майкрософтом, большой-пребольшой прибор. В частности, считалось нормальным засорять пространство имён функциями, имена которых не соответствовали соглашению по именованию, принятому в соответствущем ISO. В стандарте функция, служащая для конвертации чисел в строки, называется _itoa()
. Сейчас обе функции считаются устаревшими. Связано это с тем, что обе эти функции небезопасны, так как не проверяют размер буфера, выделенного для записи результата, что может привести к перезаписи данных, хранящихся за пределами этого буфера. На данный момент рекомендуется использовать более безопасный вариант функции _itoa_s
, который принимает дополнительный параметр - размер буфера, и не позволяет записать в буфер больше данных, чем выдылено места. Если же вы используете не чистый C, а C++, то вы можете использовать sstream
:
#include <sstream>
...
int i = 5;
std::sstream s;
s << i;
std::cout << s.str();