Функции из второй группы могут создавать строковое представление чисел в любой системе (по любому основанию) от 2 до 36. Основание передается в третьем параметре. Чтобы получить строковое представление числа в десятичной системе, передайте 10. Функции возвращают указатель на строку.
В-третьих, доступно целое семейство функций atof, atoi, atol и itoa, ltoa. Все они очень похоже между собой. Функции из первой группы преобразуют строку в число (float, int или long) в зависимости от окончания. Функции из второй группы выполняют обратное преобразование.
Хотя sprintf и sscanf довольно удобны, у них есть несколько недостатков. Во-первых, они не всегда быстро работают, во-вторых не типобезопасны. Например, если в строке формата вы укажите, что передаете два целых, а вместо этого передадите два double, ошибка обнаружится только при выполнении программы и найти ее причину будет не так-то просто.
Эти функции очень похожи на printf и scanf, за исключением того, что они работают не с консолью, а со строковым буфером.
Int j;
Зачастую требуется преобразовать число в строку и наоборот. Есть несколько способов сделать это.
Преобразования строк
Int len;
Функция возвращает длину строки, не включая нуль-терминатор. Как всегда, следите за тем, чтобы в выделенной под string памяти все же нашелся такой символ. В противном случае функция выйдет за пределы выделенной памяти и все будет плохо. Напомню, что для определения длины строки функции придется последовательно обратиться ко всем ее символам до нуль-терминатора, а значит, потенциально эта операция довольно дорогая. Поэтому, не следует использовать эту функцию в циклах, то есть вместо
Для вычисления длины строки используется функция
int strlen(const char *string);
for (i=0;i<strlen(str);i++) {
// работа со строкой
}
больше подойдет примерно такой код :
len=strlen(str);
for (i=0;i<len;i++) {
// работа со строкой
}
Можно использовать функции sprintf и sscanf. Например, так:
char str[50];
int i=15;
sprintf(str, "%d", i);
// Записать в str строковое представление i
sscanf(str, "%d", &j);
// Записать в j число, содержащееся в строке str
sprintf(str, "i=%d and j=%d", i, j);
// содержимое str: "i=15 and j=15"
Прототипы функций из первой группы:
double atof(const char* string);
int atoi(const char* string);
long atol(const char* string);
Вторая группа:char*
itoa(int value, char* string, int radix);
char* ltoa(long value, char* string, int radix);
При использовании этих функций не забывайте выделять память, достаточную для предоставления строкового предоставления числа. Например, максимальная длина десятичного строкового представления четырехбайтного беззнакового целого числа - 11 байт, включая нуль-терминатор ("4294967295").