vsnprintf()

Записать вывод в массив символов до максимального количества символов (varargs)

Прототип:

#include <stdarg.h>
#include <stdio.h>
int vsnprintf( char *buf,
size_t count,
const char *format,
va_list arg );

Аргументы:

buf
Указатель на буффер, в который функция сохранит отформатированную строку.
count
Максимальное количество символов для записи в буффер, включая нулевой завершающий символ.
format
Строка, характеризующая формат выходной информации. Она определяет какие дополнительные аргументы следует передать функции. Дополнительная информация о формате параметра fmt указана на странице printf().
arg
Cписок аргументов переменной длины для дополнительных аргументов, который должен быть инициализирован макросом va_start().

Библиотека:

libc

Описание:

Функция vsnprintf() отформатирует данные в соответсвии со строкой format и запишет результат в buf. Максимальное количество символов для записи в буффер, включая завершающий символ, определеятся count.

Функция vsnprintf() является “varargs” версией функции snprintf().

Возвращаемое значение:

Количество символов, которые были бы записаны в массив, не считая завершающий символ, если бы count был достаточно большим. На возвращаемое значение не влияет даже count равный 0; в этом случае buf может быть NULL.

Если происходит ошибка, функция vsnprintf() возвращает отрицательное значение и устанавливается errno.

Примеры:

Использование vsnprintf() для вывода сообщений об ошибках:

#include <stdio.h>
#include <stdarg.h>
#include <string.h>
char msgbuf[80];
char * fmtmsg( char *format, ... )
{
va_list arglist;
va_start( arglist, format );
strcpy( msgbuf, "Error: " );
vsnprintf( &msgbuf[7], 80-7, format, arglist );
va_end( arglist );
return (msgbuf);
}
int main( void )
{
char *msg;
msg = fmtmsg( "%s %d %s", "Failed", 100, "times" );
printf( "%s\n", msg );
return (0);
}

Классификация:

ANSI, POSIX 1003.1

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Смотри ниже
В потоке
Да

Предостережения:

Функция безопасна для вызова в обработчике сигналов, если аргументы не числа с плавающей точкой.

Тематические ссылки:

errno, fprintf(), fwprintf(), printf(), snprintf(), sprintf(), swprintf(), va_start(), vfprintf(), vfwprintf(), vprintf(), vsprintf(), vswprintf(), vwprintf(), wprintf()




Предыдущий раздел: Описание API системной библиотеки