sprintf в C/C++: форматирование строк
Привет! 👋 В этой статье речь пойдет о функции sprintf
. Эта функция очень похожа на printf
(советую почитать, если вы c ней не знакомы), лишь с тем отличием, что строку она не выводит на экран, а записывает по переданной ей ссылке.
В начале, мы посмотрим какие параметры sprintf
принимает и какое значение возвращает. Потом, мы посмотрим на несколько примеров использования этой функции. А закрепить изученное нам помогут упражнения в конце статьи.
Как отформатировать строку используя sprintf
Функция sprintf
доступна нам после подключения библиотеки <stdio.h>
. Она позволяет отформатировать строку используя такой же формат как и в функции printf
. Давайте посмотрим на сигнатуру этой функции:
int sprintf ( char * str, const char * format, ... );
- Первым аргументом функция принимает адрес в памяти, куда будет записана отформатированная строка.
- Вторым аргументом мы указываем строку форматирования. Этот и следующие аргументы совпадают с аргументами функции
printf
. - Далее мы передаем столько дополнительных параметров, сколько требуется для отформатированной строки. Можно передать больше, но не меньше.
- Возвращает функция количество символов записанных по адресу
str
(первый аргумент). Символ окончания строки\0
не учитывается в результате, хотя записан в конце строки будет.
Теперь давайте посмотри на пример использования sprintf
:
#include <stdio.h>
int main() {
char s[10];
int a = 1;
int b = 2;
int n = sprintf(s, "%d + %d = %d", a, b, a + b);
printf("s = \"%s\", n = %d \n", s, n);
return 0;
}
Вывод этой программы:
s = "1 + 2 = 3", n = 9
- Начинаем мы с объявления строки
s
на десять символов. Важно, чтобы результат работыsprintf
влез в эту переменную. Если отформатированная строка получится слишком большой, то программа может себя повести неопределенным образом. - Далее для удобства мы объявляем две переменные
a
иb
Мы будем их использовать для демонстрации форматирования строки. - Теперь мы вызываем функцию
sprintf
и записываем результат ее работы в переменнуюn
. - В конце мы выводим переменные
s
иn
на экран. Здесь вы можете убедиться, что строка действительно состоит из девяти символов и отформатирована верно.
Что буд ет выведено на экран?
#include <stdio.h>
int main() {
char s[20];
int a = 100;
int b = 200;
int n = sprintf(s, "%d + %d = %d", a, b, a + b);
printf("s = \"%s\", n = %d \n", s, n);
return 0;
}
Упражнения
-
Использование
sprintf
для форматирования даты:
Напишите программу на C++, которая запрашивает у пользователя день, месяц и год, а затем использует функциюsprintf
для форматирования этой даты в строку форматаdd-mm-yyyy
. Ваша программа должна выводить исходные данные и отформатированную строку. -
Создание своей версии
sprintf
для форматирования целых чисел:
Создайте свою версию функцииsprintf
, которая принимает строку, в которую будет записан результат, форматную строку и два целых числа. Ваша функция должна поддерживать спецификаторы формата%d
и%i
. Проверьте работу вашей функции, используя различные числа. -
Обработка ошибок при использовании
sprintf
:
Напишите программу, которая демонстрирует, что происходит, если буфер, переданный вsprintf
, оказывается слишком мал для отформатированной строки. В вашей программе должны быть использованы функцияsprintf
и буфер недостаточного размера, и результаты работы функции должны выводиться на экран.
Если хотите всегда быть в курсе последних новостей в мире программирования и IT, подписываетесь на мой Telegram-канал, где я делюсь свежими статьями, новостями и полезными советами. Буду рад видеть вас среди подписчиков!
Обсуждение