Изменение типа переменной - C (СИ)
Формулировка задачи:
Как на классическом Си изменить переменную типа int на массив char, скажем, чтобы
int w; w=word //превратилось в ... char w[]; w[0]=w; w[1]=o; w[2]=r; w[3]=d;
Решение задачи: «Изменение типа переменной»
textual
Листинг программы
#include <crtdll/errno.h>//видимо, указаны заголовки с сервера koders.com, данный заголовок идентичен errno.h #include <crtdll/stdlib.h>//=stdlib.h #include <crtdll/internal/file.h>//а вот тут вот замены в стандартных библиотеках я не нашел, однако данный файл находится по адресу [url]http://www.koders.com/c/fid52734BC7C894E80591AE397CDFF1E762DA33664D.aspx/[/url] char * itoa(int value, char *string, int radix) { char tmp[33]; char *tp = tmp; int i; unsigned v; int sign; char *sp; if (radix > 36 || radix <= 1) { __set_errno(EDOM);//тут gcc начал жутко ругаться, поменял __set_errno на perror return 0; } sign = (radix == 10 && value < 0); if (sign) v = -value; else v = (unsigned)value; while (v || tp == tmp) { i = v % radix; v = v / radix; if (i < 10) *tp++ = i+'0'; else *tp++ = i + 'a' - 10; } if (string == 0) string = (char *)malloc((tp-tmp)+sign+1); sp = string; if (sign) *sp++ = '-'; while (tp > tmp) *sp++ = *--tp; *sp = 0; return string; }
Объяснение кода листинга программы
- Включаются заголовки файлов <crtdll/errno.h>, <crtdll/stdlib.h> и <crtdll/internal/file.h>.
- Определяется функция itoa, которая преобразует целое число в строку.
- В функции itoa создается локальная переменная char tmp[33] для временного хранения результата.
- Устанавливается начальный указатель на начало временного массива tmp: char *tp = tmp;
- Объявляются следующие переменные: a. i — для хранения остатка от деления на основание системы счисления; b. v — для хранения текущего цифры числа; c. sign — для хранения признака отрицательности числа; d. char *sp — для хранения указателя на текущую позицию в результирующей строке.
- Проверяется, что основание системы счисления находится в допустимом диапазоне от 2 до 36. Если нет, то устанавливается ошибка EDOM и возвращается 0.
- Если число отрицательное, то значение переменной v инвертируется.
- Переменная v делится на основание системы счисления, и результат сохраняется в переменной i.
- Переменная v инкрементируется на 1, чтобы перейти к следующей цифре числа.
- Если i меньше или равно 9, то к переменной v добавляется символ соответствующей цифры (от '0' до '9').
- Если i больше 9, то к переменной v добавляется символ соответствующей буквы (от 'a' до 'f' или от 'A' до 'F').
- Если результирующая строка не указана, то выделяется память под новую строку.
- Если число отрицательное, то в начало результирующей строки добавляется символ '-'.
- Пока в массиве tmp остаются цифры, начиная с последней, они добавляются в результирующую строку в обратном порядке.
- В конце функции возвращается указатель на результирующую строку.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д