Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Pchar


Страницы:   1 2

Вентилятор ©   (2004-07-28 10:56:00) 

Вопрос немного необычный. Просьба не ругать. Как можно преобразовать переменную pchar из нижнего регистра в верхний и наоборот , НЕ используя при этом тип string и функции с ним связанные ?


Digitman   (2004-07-28 13:30:00) [1]


> Вентилятор


в таком случае тебе пора развернуть лыжи в ликбез ... там тебя научат считать до восьми, коль вовремя не научили ... заодно научат и прописной Паскаль-истине, которая гласит, что если идентификатор P типа PChar объявлен тобой в секции VAR, то P отныне являет собою переменную указательного типа... а вот то на что она указывает в тот или иной ран-тайм-момент, это совершенно иной вопрос


Вентилятор   (2004-07-28 13:23:00) [2]

гениально я сам в шоке


Digitman   (2004-07-28 12:56:00) [3]


> преобразовать переменную из более чем 8 символов не очень
> то получилось



> p:='dDd';


гениально !

оказывается, строка 'dDd' по последнему постановлению ЦК ВЦСПС состоит из более чем 8-ми символов


Piter   (2004-07-28 12:52:00) [4]

Вентилятор   (28.07.04 11:33) [9]
var p:pchar;
begin
p:='dDd';

но ведь p это вроде переменная? или всетаки константа?


P не переменная и не константа  - это УКАЗАТЕЛЬ. Указывать он может на что угодно. В данном случае это типизированный указатель и указывать он должен на символ. Или если применить к строкам - то указывать он должен на первый символ строки, оканчивающейся нулевым символом #0.
Ты пишешь p:='dDd'; - и указатель P начинает указывать на символ первый символ d в строке. Но область памяти в которой находится эта строка не является динамически выделенной. Это сегмент данных, туда нельзя ничего писать.

Чтобы что-то писать - сначала надо выделить память, например так GetMem(p, 255) - тогда P начнет указывать на первый байт (символ) вновь выделенной памяти, куда может уместиться 254 символа. Вот тогда в ту область памяти можно что-то писать. И не забыть потом освободить память FreeMem

А если говорить еще правильнее - нету в Дельфи случаев когда надо использовать PChar, всегда можно обойтись AnsiString. И пользуйся именно им.


Sandman25   (2004-07-28 12:51:00) [5]

Но тогда не будет минимализма.


Fay   (2004-07-28 12:51:00) [6]

Тогда терпи


Вентилятор   (2004-07-28 12:49:00) [7]


> Sandman25 ©   (28.07.04 12:44) [27]

хочу на дельфи


Sandman25   (2004-07-28 12:44:00) [8]

[26] Вентилятор   (28.07.04 12:41)

На ассемблере пишите.


Вентилятор   (2004-07-28 12:41:00) [9]

хотел минимализма. Обозвали вирусописакой. Ну спасибо дорогие господа !


Вентилятор   (2004-07-28 12:35:00) [10]


> Sandman25 ©   (28.07.04 12:31) [23]

озвучил , молодца !

Грустно.


Вентилятор   (2004-07-28 12:34:00) [11]


> Digitman ©   (28.07.04 12:28) [22]


> интерес на пустом месте не возникает
> если это не блажь, значит у тебя есть какая-то цель, о коей
> ты старательно умалчиваешь

Наверное у тебя есть какие то подозрения, которые ты не хочешь озвучить? ;)
p.s. ..до смешного ....


Sandman25   (2004-07-28 12:31:00) [12]

[22] Digitman ©   (28.07.04 12:28)

Вирус он пишет. Поэтому и умалчивает, и размер важен.


Digitman   (2004-07-28 12:28:00) [13]


> Вентилятор   (28.07.04 12:11) [20]


> Может быть и блажь, не знаю


а я знаю ... блажь - и ничто иное


> Просто интересно


интерес на пустом месте не возникает
если это не блажь, значит у тебя есть какая-то цель, о коей ты старательно умалчиваешь


Anatoly Podgoretsky   (2004-07-28 12:16:00) [14]

Вентилятор   (28.07.04 11:33) [9]
Да нет все нормально.


Вентилятор   (2004-07-28 12:11:00) [15]


> Digitman ©   (28.07.04 12:06) [19]

Может быть и блажь, не знаю ... ))) Просто интересно


Digitman   (2004-07-28 12:06:00) [16]


> размер файла увеличивается с 9 до 15 кб


и что за блажь ? мизерные до смешногго килобайты на современном носителе (емкостью в сотни Гб !!) экономить ?


> ничего не получится


все получится
не используй никаких модулей кроме Windows - и все получится


Вентилятор   (2004-07-28 11:59:00) [17]


> Anatoly Podgoretsky ©   (28.07.04 11:53) [17]

К чему я все это? Я просто хотел отказаться от string , ибо при его использовании в минимальной программе размер файла увеличивается с 9 до 15 кб. Так же как и при использовании GetMem и FreeMem (Fay ©   (28.07.04 11:52) [16])
Ну уперся я в эту идею, но чувствую ничего не получится(((


Anatoly Podgoretsky   (2004-07-28 11:53:00) [18]

Не пиши в константу, расположенную в кодовой части, не получится.
И посмотри что за тип такой PChar, лучше не используй пока не научишься работать с указателями и выделяемой памятью, будет больно и обидно.


Fay   (2004-07-28 11:52:00) [19]

Хреново ты что-то жмёшь 8)
GetMem(p, 16);
FillChar(p^, 15, 'ю');
p[15] := #0;
CharUpperBuff(p, 15);
MessageBox(0, p, '', MB_OK);
FreeMem(p);


Вентилятор   (2004-07-28 11:46:00) [20]


> Fay ©   (28.07.04 11:44) [13]
> 2Вентилятор   (28.07.04 11:34) [10]
> >> обязательно выделять? а каким методом предпочтительнее?
> Методом? Спросил бы для начала "каким объектом?"/ 8)

Хорошо,каким обьектом?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо