Записать вывод в массив символов до максимального количества символов (varargs)
#include <stdarg.h>#include <stdio.h>int vsnprintf( char *buf,size_t count,const char *format,va_list arg );
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 системной библиотеки