Я работаю на С++.
Я хочу написать потенциально очень длинную форматированную строку, используя sprintf (в частности, надежную подсчитанную версию, такую как _snprintf_s, но идея такая же). Пример приблизительной длины неизвестен во время компиляции, поэтому мне придется использовать некоторую динамически распределенную память, а не полагаться на большой статический буфер. Есть ли способ определить, сколько символов потребуется для конкретного вызова sprintf, поэтому я всегда могу быть уверен, что у меня есть достаточно большой буфер?
Мой отказ - я просто возьму длину строки формата, удвою ее и попробую. Если он работает, отлично, если нет, я просто удвою размер буфера и повторю попытку. Повторяйте, пока он не подходит. Не совсем лучшее решение.
Похоже, C99 поддерживает передачу NULL в snprintf для получения длины. Полагаю, я мог бы создать модуль, чтобы обернуть эту функциональность, если ничего другого, но я не сумасшедший об этой идее.
Может быть, fprintf для "/dev/null" / "nul" может работать? Любые другие идеи?
EDIT: Альтернативно, есть ли способ "обрезать" sprintf, чтобы он забирал среднюю запись? Если это возможно, он может заполнить буфер, обработать его, а затем начать заполнять с того места, где он остановился.