Не используйте строку функций printf
для форматирования в C ++.Используйте языковую особенность потоков (в данном случае - stringstream), которые являются безопасными по типу и не требуют от пользователя предоставления символов специального формата.
Если вы действительно действительно хотите сделать это,Вы можете предварительно выделить достаточно места в вашей строке и затем изменить ее размер, хотя я не уверен, что это более эффективно, чем использование временного массива буферов:
std::string foo;
foo.resize(max_length);
int num_bytes = snprintf(&foo[0], max_length, ...);
if(num_bytes < max_length)
{
foo.resize(num_bytes);
}