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