Я задавал тот же вопрос о strncpy
, но там string
заканчивается всей входной строкой. При передаче строки в vsnprintf
последний символ всегда обрезается: https://rextester.com/UIQMX91570
Для простоты я также включил ссылку на пример в реальном времени в коде:
void bar(const char* format, va_list vlist) {
const auto buf_size = vsnprintf(nullptr, 0U, format, vlist);
string buffer(buf_size, '\0');
vsnprintf(data(buffer), buf_size, format, vlist);
cout << data(buffer) << endl;
}
void foo(const char* format, ...) {
va_list vlist;
va_start(vlist, format);
bar(format, vlist);
va_end(vlist);
}
Если я вызову это с: foo("lorem ipsum %d", 13)
, то получу вывод:
lorem ipsum 1
Где, как я и ожидал: lorem ipsum 13
Может кто-нибудь объяснить несоответствие? При отладке я получаю buf_size
из 14, что должно быть достаточным, чтобы содержать всю строку, но этого не происходит: (