Хм, и правда нету. Рад этому: перевод в строку требует работы с буфером памяти, который где-то выделяется, где-то освобождается.. Так вот отутствие этих функций несколько снижает вероятность появления утечек памяти в результате того, что программист просто забудет, что результат функции в конечном итоге надо где-то освобождать на уровне его кода.
> перевод в строку требует работы с буфером памяти, который где-то выделяется, где-то освобождается
Нужен всего один буфер, единожды выделяемый при запуске программы (или при первом обращении к функции) и перезаписываемый при повторном вызове функции. Сколько нужно для long? До 15 байт?
> Нужен всего один буфер, единожды выделяемый при запуске программы (или при первом обращении к функции) и перезаписываемый при повторном вызове функции.
Это уж совсем спринтф какой-то получается. Я вообще-то имел в виду старый добрый вариант, где itoa получает на входе переменную и систему счисления, само распределяет буфер и отдаёт вызывающей программе указатель на него.
> Сколько нужно для long? До 15 байт?
Вот-вот, вопросы. А потом кто-то скомпиляет это под 256-разрядный процессор..
Ну да. Обёртка для sprintf как один из вариантов. А что в нём не так?
>> Сколько нужно для long? До 15 байт?
> Вот-вот, вопросы. А потом кто-то скомпиляет это под 256-разрядный процессор..
2^256<10^78 Думаю, для 256-разрядного компьютера 80 байт -- копейки. Размер таких вещей следует задавать в стандартных библиотеках для каждой архитектуры. Какие проблемы?
Ну это не совсем аргумент. В той же *scanf() есть магическая conversion specification 'a' которая выделяет буфер для получаемой строки. Другое дело, что это расширение GNU, и требует самостоятельного вызова free, что повышет вероятность появления утечек памяти ))
> Нужен всего один буфер, единожды выделяемый при запуске программы (или при первом обращении к функции) и перезаписываемый при повторном вызове функции.
Да-да, а что там у нас говорится про thread-safe coding style?