Я работаю на С++.
Я хочу написать потенциально очень длинную отформатированную строку, используя sprintf (в частности, безопасную версию с подсчетом, например _snprintf_s, но идея та же). Приблизительная длина неизвестна во время компиляции, поэтому мне придется использовать некоторую динамически выделяемую память, а не полагаться на большой статический буфер. Есть ли способ определить, сколько символов потребуется для конкретного вызова sprintf, чтобы я всегда мог быть уверен, что у меня достаточно большой буфер?
Мой запасной вариант: я просто возьму длину строки формата, удвою ее и попробую. Если это сработает, отлично, если нет, я просто удвою размер буфера и попробую еще раз. Повторяйте, пока не подойдет. Не самое умное решение.
Похоже, C99 поддерживает передачу NULL в snprintf для получения длины. Я полагаю, что мог бы создать модуль, чтобы обернуть эту функциональность, если не что иное, но я не в восторге от этой идеи.
Может быть, вместо этого сработает fprintf для «/dev/null»/«nul»? Любые другие идеи?
РЕДАКТИРОВАТЬ: В качестве альтернативы, есть ли способ «разбить» sprintf, чтобы он поднимался в середине записи? Если это возможно, он может заполнить буфер, обработать его, а затем начать повторное заполнение с того места, где он остановился.