Я кодирую под Arduino, и я хотел бы разработать функцию форматирования серийной печати, поэтому я пытаюсь использовать sprintf
неизвестного размера буфера. В принципе, мы можем не говорить о Arduino и его серийном выходе, и рассмотреть возможность написания текста в буфер, а затем распечатать его, используя printf
. Я попытался это одно:Wrapper for printf
#include <stdio.h>
#include <stdarg.h>
void printf0(const char* format, ...) {
va_list args;
va_start(args, format);
vprintf(format, args);
va_end(args);
}
void printf1(const char* format,...) {
va_list args;
va_start(args, format);
char buf[vsnprintf(NULL, 0, format, args)];
sprintf(buf, format, args);
printf(buf);
va_end(args);
}
int main()
{
printf0("Hello, %d!\n", 15);
printf1("Hello, %d!\n", 15);
return 0;
}
printf0
функция является точным примером я нашел here. Мои попытки - это функция printf1
, которая производит непредсказуемое число. Пример вывода вышеуказанной программы:
Hello, 15!
Hello, 860799736!
'Sprintf (BUF, формат, арг),' должен быть 'vsnprintf (ЬиЙ, SizeOf ЬиМ, формат, args); '. – mch
@LPs, вызывающие 'vsnprintf' с указателем' 'NULL' и размером' 0', возвращают только число символов 'char', которое функция записывает в буфер. – mch
@ Jarod42 - Уверен, что речь идет о C++ вообще. Кажется, это обычный спам «двойной тег». – StoryTeller