РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
620 of 815 menu

Функция snprintf

Функция snprintf форматирует данные и записывает результат в символьный буфер, не превышая заданный размер. В первый параметр мы передаём указатель на буфер, во второй - максимальное количество символов, которое можно записать (включая завершающий нуль), в третий - строку формата, а далее - аргументы для подстановки в этот формат. Функция возвращает количество символов, которое было бы записано, если бы размер буфера был неограничен. Это позволяет заранее узнать необходимый размер буфера.

Синтаксис

int snprintf(char* buffer, size_t size, const char* format, ...);

Пример

Давайте запишем в буфер строку с именем и возрастом, ограничив размер буфера 50 символами:

#include <iostream> #include <cstdio> using namespace std; int main() { char buffer[50]; int age = 25; int res = snprintf(buffer, sizeof(buffer), "Name: %s, Age: %d", "Alex", age); cout << buffer << endl; cout << "Written: " << res << endl; return 0; }

Результат выполнения кода:

"Name: Alex, Age: 25" "Written: 19"

Пример

Давайте убедимся, что функция не переполнит буфер, если строка окажется слишком длинной. Буфер размером 10 символов, а строка значительно длиннее:

#include <iostream> #include <cstdio> using namespace std; int main() { char buffer[10]; int res = snprintf(buffer, sizeof(buffer), "Value: %s", "abcdefghij"); cout << buffer << endl; cout << "Needed: " << res << endl; return 0; }

Результат выполнения кода:

"Value: ab" "Needed: 16"

Как видим, в буфер поместилось только 9 символов плюс завершающий нуль, а возвращённое значение 16 показывает, сколько символов потребовалось бы на самом деле.

Пример

Давайте используем возвращённое значение, чтобы выделить буфер нужного размера динамически:

#include <iostream> #include <cstdio> #include <cstdlib> using namespace std; int main() { int needed = snprintf(nullptr, 0, "Sum: %d", 12345); char* buffer = (char*)malloc(needed + 1); snprintf(buffer, needed + 1, "Sum: %d", 12345); cout << buffer << endl; free(buffer); return 0; }

Результат выполнения кода:

"Sum: 12345"

Смотрите также

  • функция sprintf,
    которая форматирует строку в буфер без ограничения размера
  • функция printf,
    которая выводит форматированную строку на экран
  • функция fprintf,
    которая выводит форматированную строку в файл
  • функция format,
    которая форматирует строку в современном стиле C++
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить