Функція vsnprintf () в C ++ використовується для запису відформатованого рядка в буфер рядків.
На відміну від vsprintf (), максимальна кількість символів, які можна записати в буфер, вказано в vsnprintf().
прототип vsnprintf ()
int vsnprintf (буфер char *, size_t buf_size, формат const char *, va_list vlist);
vsnprintf()Функція записує рядок , на яку вказує формат для рядка символів буфера. Максимальна кількість символів, яку можна записати, - buf_size. Після запису символів додається закінчувальний нульовий символ. Якщо buf_size дорівнює нулю, нічого не записується, а буфер може бути нульовим покажчиком.
Формат рядка може містити специфікатори формату, що починаються з%, які замінюються значеннями змінних, які передаються як список vlist.
Це визначається у файлі заголовка.
Параметри vsnprintf ()
- буфер: вказівник на рядок символів для запису результату.
 - buf_size: Максимальна кількість символів для запису.
 - формат: вказівник на рядок із нульовим завершенням, який записується у файловий потік. Він складається з символів разом із необов’язковими специфікаторами формату, що починаються з%.
Специфікатори формату замінюються значеннями відповідних змінних, що слідують за рядком формату.
Специфікатор формату складається з таких частин:
- Провідний знак%
 - Прапори: необов’язковий один або кілька прапорів, що змінює поведінку перетворення.
- -: Ліворуч обґрунтуйте результат у полі. За замовчуванням це правильно виправдано.
 - +: Знак результату додається до початку значення, навіть для позитивних результатів.
 - Пробіл: Якщо знаку немає, пробіл приєднується до початку результату.
 - #: Виконується альтернативна форма перетворення.
 - 0: використовується для цілого числа та числа з плаваючою комою. Провідні нулі використовуються для заповнення цифр замість пробілу.
 
 - Ширина: необов’язкове * або ціле значення, що використовується для вказівки поля мінімальної ширини.
 - Точність: Необов’язкове поле, що складається з a. після чого * або ціле число, або нічого, щоб вказати точність.
 - Довжина: необов’язковий модифікатор довжини, який визначає розмір аргументу.
 - Специфікатор: специфікатор формату перетворення. Доступні специфікатори формату такі: 
Специфікатор формату Опис % Відбитків% c Пише одного персонажа s Записує рядок символів d або i Перетворює підписане ціле число в десяткове подання o Перетворює ціле число без знака у вісімкове представлення X або x Перетворює ціле число без знака в шістнадцяткове подання u Перетворює ціле число без знака в десяткове подання F або f Перетворює число з плаваючою точкою в десяткове подання Е або е Перетворює число з плаваючою комою в десятковий запис степеня A або a Перетворює число з плаваючою комою в шістнадцятковий показник G або g Перетворює число з плаваючою комою в десятковий або десятковий запис степеня п Повертає кількість символів, записаних дотепер цим викликом функції. Результат записується у значення, на яке вказує аргумент стор Пише послідовність символів реалізації, що визначає покажчик. Отже, загальним форматом специфікатора формату є:
%(flags)(width)(.precision)(length)specifier 
 - vlist: список аргументів, що містять дані для запису.
 
vsnprintf () Повернене значення
- У разі успіху 
vsnprintf()функція повертає кількість записаних символів. - При відмові повертає від'ємне значення.
 - Коли довжина відформатованого рядка перевищує buf_size, його потрібно скоротити. У таких випадках 
vsnprintf()функція повертає загальну кількість символів, за винятком закінчувального нульового символу, який був би записаний, якби не було встановлено обмеження buf_size. 
Приклад: Як працює функція vsnprintf ()
 #include #include void write(char* buf, int buf_size, const char *fmt,… ) ( va_list args; va_start(args, fmt); vsnprintf(buf, buf_size, fmt, args); va_end(args); ) int main () ( char buffer(100); char fname(20) = "Bjarne"; char lname(20) = "Stroustrup"; char lang(5) = "C++"; write(buffer, 27, "%s was created by %s %s", lang, fname, lname); printf("%s", buffer); return 0; )
Коли ви запускаєте програму, результат буде:
C ++ був створений Bjarne








