Преобразование строк в числа и чисел в строки

Последнее обновление: 13.01.2023

Нередко в программах встречается ситуация, когда надо преобразовать число в строку или строку в число. Для этой цели в стандартной библиотеке языка С определены функции strtol() и snprintf().

Из строки в число. strtol

Функция strtol() преобразует строку в число типа long int. Функция определена в заголовочном файле stdlib.h и имеет следующий прототип:

long strtol(const char *restrict str, char **restrict str_end, int base);

Параметры функции

  • str - строка с числом, которое надо преобразовать в числовой тип. Ключевое слово restrict указывает компилятору оптимизировать код и что никакой другой параметр не будет указывать на адрес данного параметра.

  • str_end - указатель на последний символ строки. Данный параметр можно игнорировать, передавая ему значение NULL

  • base - основание, система исчисления, в которую надо преобразовать данные (значение от 2 до 36).

Результатом функции является преобразованное число типа long.

Например, преобразуем строку в число в десятичной системе:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	const char * str = "24 flowers";
 	long result = strtol(str, NULL, 10);
 	printf("Result: %ld\n", result);	// Result: 24
	return 0;
}

В примере выше второй параметр функции никак не использовался - мы ему передавали значение NULL, и функция нормально работала. Однако он может быть полезен, если нам надо получить остаток строки, которая идет после числа:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	const char * str = "24 flowers";
	char* str_end;
 	long result = strtol(str, &str_end, 10);
 	printf("Result: %ld\n", result);				// Result: 24
	printf("Rest of the string:%s\n", str_end);		// Rest of the string: flowers
	return 0;
}

Из числа в строку. snprintf

Функция snprintf() преобразует число в отформатированную строку. Функция определена в заголовочном файле stdio.h и имеет следующий прототип:

int snprintf(char *restrict str_buffer, size_t buffer_size, const char *restrict format, ... );

Параметры функции

  • str_buffer - строка, в которую помещается преобразованное число.

  • buffer_size - максимальное количество символов строки. Функция записывает в строку buffer-size - 1 байт и добавляет концевой нулевой байт

  • format - задает формат преобразования в строку.

При успешном преобразовании функция возвращает количество символов, записанных в строку (исключая концевой нулевой байт). При неудачном преобразовании возвращается отрицательное число.

Пример преобразования:

#include <stdio.h>

int main(void)
{
	int number = 354;
 	char str [10];
 	snprintf(str, sizeof str, "%d", number);
 	printf("Result: %s\n", str);		// Result: 354
	return 0;
}

При этом строка форматирования может содержать множество параметров:

#include <stdio.h>

int main(void)
{
	int count = 3;
	double price = 79.99;
 	char str [50];
 	snprintf(str, sizeof str, "Count: %d \tPrice: %.2f", count, price);
 	printf("%s\n", str);		// Count: 3        Price: 79.99
	return 0;
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850