![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Pchar
Вентилятор © (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)
Хорошо,каким обьектом?