Модуль stdio.h
Ввод-вывод, форматирование текста
Модуль stdio.h предоставляет стандартные функции языка C (компилятор GCC) для работы с вводом-выводом, включая форматированный вывод строк в стандартный поток вывода, строки или буферы памяти, а также вывод отдельных символов и строк. Функции поддерживают форматирование с использованием спецификаторов формата, аналогичных тем, что используются в языке C.
Для работы с модулем stdio.h реализованы следующие функции:
// Форматированный вывод
int printf(const char *format, ...);
int vprintf(const char *format, va_list ap);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
// Вывод символов и строк
int putchar(int c);
int puts(const char *s);
Спецификаторы формата
Функции форматированного вывода (printf, vprintf, sprintf, snprintf, vsprintf, vsnprintf) используют строку формата format, которая может содержать спецификаторы формата. Основные спецификаторы:
%d,%i— целое число со знаком (int).%u— целое число без знака (unsigned int).%f— число с плавающей точкой (floatилиdouble).%s— строка (нуль-терминированная).%c— символ (char).%p— указатель (в шестнадцатеричном формате).%%— символ процента.
Дополнительные модификаторы:
- Число (например,
%10d) — минимальная ширина поля. - Точка и число (например,
%.2f) — точность (количество знаков после запятой для чисел с плавающей точкой). 0(например,%08d) — заполнение нулями слева.-(например,%-10s) — выравнивание по левому краю.
printf
Функция int printf(const char *format, ...) выводит форматированную строку в стандартный поток вывода (обычно консоль).
Параметры:
format— строка формата, содержащая текст и спецификаторы формата....— переменное количество аргументов, соответствующих спецификаторам вformat.
Возвращаемые значения:
- Количество выведенных символов (без учета завершающего нуль-символа) или отрицательное значение при ошибке.
Пример использования:
#include <stdio.h>
int main(void) {
int num = 42;
float val = 3.14159;
const char *str = "world";
int res = printf("Number: %d, Float: %.2f, String: %s\n", num, val, str);
printf("Выведено символов: %d\n", res); // Ожидается: Number: 42, Float: 3.14, String: world
// Выведено символов: 33
return 0;
}
vprintf
Функция int vprintf(const char *format, va_list ap) выводит форматированную строку в стандартный поток вывода, используя список аргументов va_list.
Параметры:
format— строка формата.ap— список аргументов, созданный с использованиемva_startиva_end(из<stdarg.h>).
Возвращаемые значения:
- Количество выведенных символов или отрицательное значение при ошибке.
Пример использования:
#include <stdio.h>
#include <stdarg.h>
void print_formatted(const char *format, ...) {
va_list args;
va_start(args, format);
int res = vprintf(format, args);
va_end(args);
printf("\nВыведено символов: %d\n", res);
}
int main(void) {
print_formatted("Number: %d, String: %s\n", 42, "world");
// Ожидается: Number: 42, String: world
// Выведено символов: 22
return 0;
}
sprintf
Функция int sprintf(char *str, const char *format, ...) записывает форматированную строку в буфер str, включая завершающий нуль-символ.
Параметры:
str— указатель на буфер назначения (должен быть достаточно большим).format— строка формата....— переменное количество аргументов.
Возвращаемые значения:
- Количество записанных символов (без учета нуль-символа) или отрицательное значение при ошибке.
Примечание: Не проверяет размер буфера, что может привести к переполнению. Рекомендуется использовать snprintf.
Пример использования:
#include <stdio.h>
int main(void) {
char buf[50];
int num = 42;
int res = sprintf(buf, "Number: %d", num);
printf("Результат: %s, символов: %d\n", buf, res); // Ожидается: Результат: Number: 42, символов: 10
return 0;
}
snprintf
Функция int snprintf(char *str, size_t size, const char *format, ...) записывает не более size символов форматированной строки в буфер str, включая завершающий нуль-символ.
Параметры:
str— указатель на буфер назначения.size— максимальное количество записываемых символов (включая нуль-символ).format— строка формата....— переменное количество аргументов.
Возвращаемые значения:
- Количество символов, которые были бы записаны при достаточно большом буфере (без учета нуль-символа), или отрицательное значение при ошибке.
Пример использования:
#include <stdio.h>
int main(void) {
char buf[10];
int num = 123456;
int res = snprintf(buf, sizeof(buf), "Number: %d", num);
printf("Результат: %s, символов: %d\n", buf, res); // Ожидается: Результат: Number: 1, символов: 11
return 0;
}
vsprintf
Функция int vsprintf(char *str, const char *format, va_list ap) записывает форматированную строку в буфер str, используя список аргументов va_list.
Параметры:
str— указатель на буфер назначения.format— строка формата.ap— список аргументов.
Возвращаемые значения:
- Количество записанных символов (без учета нуль-символа) или отрицательное значение при ошибке.
Примечание: Небезопасна из-за отсутствия проверки размера буфера. Рекомендуется использовать vsnprintf.
Пример использования:
#include <stdio.h>
#include <stdarg.h>
void format_string(char *buf, const char *format, ...) {
va_list args;
va_start(args, format);
int res = vsprintf(buf, format, args);
va_end(args);
printf("Результат: %s, символов: %d\n", buf, res);
}
int main(void) {
char buf[50];
format_string(buf, "Value: %d", 42);
// Ожидается: Результат: Value: 42, символов: 9
return 0;
}
vsnprintf
Функция int vsnprintf(char *str, size_t size, const char *format, va_list ap) записывает не более size символов форматированной строки в буфер str, используя список аргументов va_list.
Параметры:
str— указатель на буфер назначения.size— максимальное количество записываемых символов (включая нуль-символ).format— строка формата.ap— список аргументов.
Возвращаемые значения:
- Количество символов, которые были бы записаны при достаточно большом буфере (без учета нуль-символа), или отрицательное значение при ошибке.
Пример использования:
#include <stdio.h>
#include <stdarg.h>
void format_string(char *buf, size_t size, const char *format, ...) {
va_list args;
va_start(args, format);
int res = vsnprintf(buf, size, format, args);
va_end(args);
printf("Результат: %s, символов: %d\n", buf, res);
}
int main(void) {
char buf[10];
format_string(buf, sizeof(buf), "Value: %d", 123456);
// Ожидается: Результат: Value: 12, символов: 10
return 0;
}
putchar
Функция int putchar(int c) выводит символ c в стандартный поток вывода.
Параметры:
c— символ для вывода (передается какint, но интерпретируется какunsigned char).
Возвращаемые значения:
- Код выведенного символа или
EOFпри ошибке.
Пример использования:
#include <stdio.h>
int main(void) {
int res = putchar('A');
printf("\nВыведен символ с кодом: %d\n", res); // Ожидается: A
// Выведен символ с кодом: 65
return 0;
}
puts
Функция int puts(const char *s) выводит строку s в стандартный поток вывода, добавляя символ новой строки (\n).
Параметры:
s— указатель на нуль-терминированную строку.
Возвращаемые значения:
- Неотрицательное значение при успехе или
EOFпри ошибке.
Пример использования:
#include <stdio.h>
int main(void) {
const char *s = "Hello, world!";
int res = puts(s);
printf("Результат: %d\n", res); // Ожидается: Hello, world!
// Результат: неотрицательное значение
return 0;
}