Изменение типа переменной - 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;
}

Объяснение кода листинга программы

  1. Включаются заголовки файлов <crtdll/errno.h>, <crtdll/stdlib.h> и <crtdll/internal/file.h>.
  2. Определяется функция itoa, которая преобразует целое число в строку.
  3. В функции itoa создается локальная переменная char tmp[33] для временного хранения результата.
  4. Устанавливается начальный указатель на начало временного массива tmp: char *tp = tmp;
  5. Объявляются следующие переменные: a. i — для хранения остатка от деления на основание системы счисления; b. v — для хранения текущего цифры числа; c. sign — для хранения признака отрицательности числа; d. char *sp — для хранения указателя на текущую позицию в результирующей строке.
  6. Проверяется, что основание системы счисления находится в допустимом диапазоне от 2 до 36. Если нет, то устанавливается ошибка EDOM и возвращается 0.
  7. Если число отрицательное, то значение переменной v инвертируется.
  8. Переменная v делится на основание системы счисления, и результат сохраняется в переменной i.
  9. Переменная v инкрементируется на 1, чтобы перейти к следующей цифре числа.
  10. Если i меньше или равно 9, то к переменной v добавляется символ соответствующей цифры (от '0' до '9').
  11. Если i больше 9, то к переменной v добавляется символ соответствующей буквы (от 'a' до 'f' или от 'A' до 'F').
  12. Если результирующая строка не указана, то выделяется память под новую строку.
  13. Если число отрицательное, то в начало результирующей строки добавляется символ '-'.
  14. Пока в массиве tmp остаются цифры, начиная с последней, они добавляются в результирующую строку в обратном порядке.
  15. В конце функции возвращается указатель на результирующую строку.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы