Estoy trabajando en C++.¿Hay alguna forma de determinar cuántos caracteres escribirá sprintf?
Quiero escribir una cadena con formato potencialmente muy largo usando sprintf (específicamente una versión segura contada como _snprintf_s, pero la idea es la misma). La longitud aproximada es desconocida en el momento de la compilación, así que tendré que usar alguna memoria asignada dinámicamente en lugar de depender de un gran buffer estático. ¿Hay alguna forma de determinar cuántos caracteres se necesitarán para una llamada sprintf en particular, así puedo estar seguro de tener un buffer lo suficientemente grande?
Mi alternativa es tomar la longitud de la cadena de formato, duplicarla e intentarlo. Si funciona, genial, si no lo hace, doblaré el tamaño del búfer e intentaré de nuevo. Repita hasta que encaje. No es exactamente la solución más inteligente.
Parece que C99 admite pasar NULL a snprintf para obtener la longitud. Supongo que podría crear un módulo para ajustar esa funcionalidad si nada más, pero no estoy loco por esa idea.
Quizás un fprintf a "/ dev/null"/"nul" podría funcionar en su lugar? ¿Alguna otra idea?
EDITAR: Alternativamente, ¿hay alguna manera de "dividir" el sprintf para que retome la escritura media? Si eso es posible, podría llenar el buffer, procesarlo, luego comenzar a rellenar desde donde lo dejó.
No estoy seguro de por qué esto fue downvoted ... –
No lo hice pero puedo ver tal vez por qué se hizo. No necesita C99 ya que hay versiones PD de snprintf() por ahí. O tal vez porque la pregunta específicamente solicitaba una solución printf() en lugar de una cadena de caracteres. No lo sé, hace tiempo que renuncié a tratar de entender a los downvoters drive-by. – paxdiablo