На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила ЧаВо (FAQ) разделов Паскаля
В этом разделе разрешено создавать только темы, в которых описано РЕШЕНИЕ какой-либо общей проблемы, или описание какого-либо аспекта языка Паскаль.
Обсуждение уже созданных тем разрешено, но только конструктивное, например указание на ошибку или уточнение имеющегося текста.

Также читать Требования к оформлению статей
Модераторы: volvo877, Romtek
  
> pChar , немного о переменных этого типа
    PChar
    Предопределенный тип PChar обозначает указатель на строку с завершающим нулем.

    Описание
    Type PChar = ^Char;

    Borland Pascal для Windows поддерживает набор расширенных правил синтаксиса (управляемых с помощью директивы компилятора $X) для облегчения обработки строк типа PChar.

    pChar может указывать на строку, содержащую до 65535 символов (только в 16-битных компиляторах).
    Т.к. pChar - тип указателя, то для p :pChar допустимо: p := NIL.
    Процедуры Write, WriteLn, Assign могут использовать перпеменные этого типа в качестве своих параметров.

    Для работы с переменными этого типа корпорацией Borland был создан специальный модуль Strings, который входит в стандартный пакет BP7.


    Пример описания константы:
    ExpandedWrap disabled
      CONST
        p :pChar = 'interesting type';


    Пример перевода из String в pChar:
    ExpandedWrap disabled
      VAR
        s :String; {обычная строка}
        p :pChar; {указатель на строку с завершающим нулем}
       
      BEGIN
        ...
        s := s + #0; {делаем, чтоб строка заканчивалась нулевым символом}
        p := ^s[1]; {пропускаем нулевой символ (он хранит длину строки) и делаем присваивание}
        ...
      END.
    Сообщение отредактировано: Romtek -
      Чудненько %) А как преобразовать обратно из Pchar в строку ?
        Ну, во-первых, нужно, чтобы наша p (типа pChar) указывали на строку длины не более, чем 255, иначе придется разбивать минимум на несколько обычных строк.

        Далее заведем переменную такую

        ExpandedWrap disabled
          TYPE
            tm = Array[1 .. 65535] Of Char;
          VAR
            m: ^tm;


        Делаем m := p;

        После чего просто собираем строку побуквенно:
        ExpandedWrap disabled
          VAR
            s: String; {строка}
            i: Byte; {счетчик}
           
            Byte(s[0]) := 0; {делаем строку пустой}
            i := 1; {присваиваем начальное значение счетчику}
            While (mt^[i] <> #0) And (i <= 255) Do
            Begin
              s := s + mt^[i]; {изменяем строку}
              Inc(i) {увеличиваем счетчик}
            End;
        Сообщение отредактировано: volvo877 -
          Нет, ну что ты, вот гораздо более простой метод:
          ExpandedWrap disabled
            const
              a:pchar='Привет всем, и мне конечно!!!';
            var
              s:string;
            begin
              while (a[word(s[0])]<>#0) and (s[0]<#255) do s:=s+a[word(s[0])];
              writeln(s);
            end.
          Сообщение отредактировано: volvo877 -
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0303 ]   [ 16 queries used ]   [ Generated: 17.03.25, 07:48 GMT ]