См. Также: SO 327980 .
Комитет Standard C создал технический отчет, TR 24731-1 , частично при поддержке Microsoft (я считаю). Он стандартизирует интерфейсы для различных функций, таких как vsnprintf_s()
. К сожалению, однако, интерфейс, определенный стандартом, несовместим с интерфейсом, определенным Microsoft, что делает стандарт в значительной степени неактуальным.
Например, TR 24731-1 говорит, что интерфейс для vsnprintf_s()
:
#define _ _STDC_WANT_LIB_EXT1_ _ 1
#include <stdarg.h>
#include <stdio.h>
int vsnprintf_s(char * restrict s, rsize_t n,
const char * restrict format, va_list arg);
К сожалению, MSDN говорит, что интерфейс для vsnprintf_s()
:
int vsnprintf_s(
char *buffer,
size_t sizeOfBuffer,
size_t count,
const char *format,
va_list argptr
);
Параметры
- буфер - место хранения для вывода.
- sizeOfBuffer - Размер буфера для вывода.
- count - Максимальное количество символов для записи (не включая завершающий ноль) или _TRUNCATE.
- формат - спецификация формата.
- argptr - указатель на список аргументов.
Обратите внимание, что это не просто вопрос отображения типов: число фиксированных аргументов отличается и, следовательно, несовместимо. Мне также неясно (и, по-видимому, также и комитету по стандартам), какая польза от наличия обоих 'sizeOfBuffer' и 'count'; она выглядит как одна и та же информация дважды (или, по крайней мере, код обычно пишется с одинаковым значением для обоих параметров).