#include <stdio.h> предоставляет форматирование строк и вывод в кольцевую консоль сценария. Это функции прошивки; stdout не является файлом или терминалом ОС. Файловые функции, scanf/getchar и stdin в текущем заголовке отсутствуют.

Форматы и размер

Используются обычные спецификаторы C: %d/%i для int, %u для unsigned int, %ld/%lu для long, %lld/%llu для long long, %f для double (float продвигается до double), %s для нуль-терминированной строки, %c, %p и %%. Например, %08x задаёт ширину и ведущие нули, %.2f — два знака после запятой. Тип аргумента должен соответствовать формату.

Размеры — в байтах, включая байты UTF-8, а не в числе видимых символов. Итоговая консоль ограничена кольцевым буфером (1024 байта в проверенной прошивке для X0); при заполнении старые данные вытесняются. Текущий текст доступен в веб-интерфейсе и через /txt?out.

printf

  int printf(const char *format, ...);
  

Форматирует текст во временный буфер и передаёт в консоль не больше 127 байт за вызов. Длинный результат усекается, но возвращаемое значение — полная длина, которую сформировал бы formatter, без завершающего нуля. Отрицательный результат означает ошибку форматирования. Усечение возможно внутри многобайтного символа UTF-8; длинные строки выводите отдельными короткими фрагментами.

Например, printf("%0500d", 1) возвращает 500 и передаёт в консоль первые 127 байт. Это отличается от обычного неограниченного stdout настольного C.

vprintf

  int vprintf(const char *format, va_list ap);
  

Аналог printf с тем же ограничением 127 байт и полной возвращаемой длиной. Принимает обычный va_list, а не указатель на него. Создавайте список с va_start и завершайте va_end; для повторного использования требуется отдельная копия va_copy.

  #include <stdio.h>
#include <stdarg.h>

static int print_values(const char *format, ...) {
    va_list arguments;
    va_start(arguments, format);
    int result = vprintf(format, arguments);
    va_end(arguments);
    return result;
}

int main(void) {
    print_values("Value: %d; %s\n", 42, "ready");
    return 0;
}
  

sprintf

  int sprintf(char *str, const char *format, ...);
  

Записывает текст и завершающий ноль в str, не зная размера буфера. Возвращает длину без нуля либо отрицательное значение при ошибке. Буфер должен вмещать результат целиком. Ограничение printf в 127 байт сюда не относится; для ограниченного буфера используйте snprintf.

snprintf

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

Записывает не больше size-1 байт текста и ноль при size>0. Возвращает длину, которая требовалась бы без усечения; result >= size означает нехватку места, result < 0 — ошибку. size включает место для нуля. При size=0 запись не производится, для вычисления требуемой длины допустим NULL в str.

  #include <stdio.h>

int main(void) {
    char buffer[32];
    int length = snprintf(buffer, sizeof(buffer), "Value: %.2f", 3.14159);
    if (length < 0 || (size_t)length >= sizeof(buffer)) {return 1;}
    puts(buffer);
    return 0;
}
  

vsprintf

  int vsprintf(char *str, const char *format, va_list ap);
  

Аналог sprintf с va_list. Не проверяет размер. Сам по себе va_list не делает запись безопасной; для ограниченного буфера предпочтителен vsnprintf.

vsnprintf

  int vsnprintf(char *str, size_t size, const char *format, va_list ap);
  

Аналог snprintf с va_list. Возвращает полную требуемую длину; правила нулевого размера и усечения такие же. Это не вывод в консоль — результат остаётся в переданном буфере.

putchar

  int putchar(int c);
  

Добавляет младший байт c в консоль. В текущей реализации возвращает позицию конца кольцевого буфера, а не напечатанный символ, как требует стандартная функция C. Не используйте результат как значение символа или стандартный EOF-контракт.

puts

  int puts(const char *s);
  

Передаёт строку и добавляет \n. Ограничение formatter в 127 байт не применяется, но запись строки длиннее полного буфера stdout в текущей реализации пропускается; добавление новой строки остаётся. Для длинных данных делите вывод на короткие части.

Возвращает результат внутреннего putchar для \n, то есть позицию в кольцевом буфере, а не количество напечатанных байт. NULL вместо строки недопустим.