Указатели Си. Декодирование данных

Суть в том, что длина декодированных данных меньше, что url-кодированных. В итоге мы помещаем декодированные данные в ту же строку. Как тогда заменяются все символы в начальной строке?

  // Функция URL-декодирования.
    // Функция преобразует строку данных st в нормальное представление.
    // Результат помещается в ту же строку, что была передана в параметрах.
    void url_decode(char *st) {
      char *p = st;  // указывает на текущий символ строки
      char hex[3]; // временный буфер для хранения %XX
      int code;    // преобразованный код
      // запускаем цикл, пока не кончится строка (т. е. пока 
      // не появится символ с кодом 0, см. ниже)
      do {
        // Если это %-код ...
        if(*st == '%') { // тогда копируем его во временный буфер
          hex[0] = *(++st);
          hex[1] = *(++st);
          hex[2] = 0;
          // переводим его в число
          sscanf(hex, "%X", &code);
          // и записываем обратно в строку
          *p++ = (char)code;
          // указатель p всегда отмечает то место в строке, в которое
          // будет помещен очередной декодированный символ
        }
        // иначе, если это "+", то заменяем его на " "
        else if(*st == '+') *p++ = ' ';
        // а если ни то, ни другое — оставляем, как есть
        else *p++ = *st;
      } while(*st++ != 0); // пока не найдем нулевой код
    }

Ответы (0 шт):