Нередко в программах встречается ситуация, когда надо преобразовать число в строку или строку в число. Для этой цели в стандартной библиотеке языка С определены функции strtol() и snprintf().
Функция 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() преобразует число в отформатированную строку. Функция определена в заголовочном файле 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; }