Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Result=PChar(s)   Найти похожие ветки 

 
DDA ©   (2004-05-07 19:25) [0]

Например есть у меня переменная i:PChar;
и функция , результат которой тоже PChar
Изначально i:=StrAlloc(100);
и заполнена символама

function ddaFUNC(ii:PChar):PChar;
var s:string;
begin
 s:=string(ii);
 ...
 //s состоит из символов,в том числе и #0
 Result:=PChar(s);
 //а Result получается обрезаным до символа с кодом #0
 //в результате и перем. i получ. обрезанная
end;

...
var i,i2:PChar;
begin
 i:=strAlloc(100);
 i[0]:=
 .
 .
 i[99]:=
 i:=ddaFUNC(i);
end;


Как бы сделать что б result не обрезалась до #0


 
ASMiD ©   (2004-05-07 19:31) [1]

Так в PChar ограничителем длины является #0 поэтому PChar(s); и распределяет память до первого №0 (он же только указатель и подругому конец информации определять не умеет)
А глубокий смысл функции не ясен.


 
Style ©   (2004-05-07 19:32) [2]

А что?
i: array[0..99] of char не подойдет?

А какой смымсл в твоем ddaFunc?
подменить указатель i и потерять указатель на только что выделенную память? :)


 
Alex Konshin ©   (2004-05-07 19:32) [3]

У тебя вообще нет понимания того, что такое String и что такое PChar, поэтому приведенные тобой фрагменты в принципе неправильные. Про "обрезание" это уже вообще дело десятое.
Почитай что-нибудь про эти типы.


 
Alex Konshin ©   (2004-05-07 19:34) [4]

ASMiD ©   (07.05.04 19:31) [1]
Так в PChar ограничителем длины является #0 поэтому PChar(s); и распределяет память до первого №0

Вам тоже следовало бы почитать что-нибудь прежде чем советовать другим. PChar ничего никогда никому не распределает. Это просто указатель.


 
ASMiD ©   (2004-05-07 19:38) [5]

Виноват. Не распределяет, а в распределенной (фактически получается так)
Просто уж больно вопрос странный.


 
ASMiD ©   (2004-05-07 19:46) [6]

Господи!
А что дальше-то будет.
Ведь товарищ решил поработать с указателем на стек!!
DDA - переменная S:string; перестает существовать сразу же после выхода из функции и что на ее месте окажется - неизвестно, а Result ссылается именно на то место, которое она занимала.


 
DDA ©   (2004-05-07 20:12) [7]


> Style ©   (07.05.04 19:32) [2]
> А что?
> i: array[0..99] of char не подойдет?

Нет.


> ASMiD ©   (07.05.04 19:46) [6]

Опа
Точно.

Ладно,допустим что переменная s глобальная.
Тогда как мне s присвоить все символы из переменной ii не путём добавления каждого символа из цикла(если это возможно)
и обратно()


 
Jack128 ©   (2004-05-07 20:23) [8]


> Ладно,допустим что переменная s глобальная.
> Тогда как мне s присвоить все символы из переменной ii не
> путём добавления каждого символа из цикла(если это возможно)
> и обратно()
простым присваиванием


 
Cobalt ©   (2004-05-07 20:28) [9]

небольшое замечание - насколько я знаю - символ #0 тоже входит в PChar(при его использовании как строки)
Таким образом, если вы намерены использовать PChar как строку из 100 символов, то резервировать надо 101 байт.
И еще - (насколько я знаю) при преобразовании строки в PChar копируется только до 1-го символа #0.


 
Alex Konshin ©   (2004-05-07 20:35) [10]

Cobalt ©   (07.05.04 20:28) [9]
И еще - (насколько я знаю) при преобразовании строки в PChar копируется только до 1-го символа #0.

Давайте по-аккуратнее с советами!
Вы просто бред написали. PChar - указатель, и при преобразовании в него ничего никуда не копируется!
Это при преобразовании из PChar в String копируется до первого #0, и то только при прямом преобразовании. А ведь можно и SetString или Copy использовать.


 
DDA ©   (2004-05-07 20:49) [11]


> Alex Konshin ©   (07.05.04 20:35) [10]

(SetString)Воооо,что я и хотел от вас узнать.


 
Alex Konshin ©   (2004-05-07 20:54) [12]

Так ты правильно вопросы задавай, получишь правильный ответ.
А про String все-таки почитай - много полезного узнаешь.


 
Fay ©   (2004-05-08 08:40) [13]

Было бы славно выделить память под результат. Типа

GetMem(Result, Length(s)+1);

потом

Move(PChar(s)^, Result^, Length(s)+1);

потом счастье. 8)



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
7-1081509968
Wistler
2004-04-09 15:26
2004.05.23
Как узнать количество страниц отправленных на принтер


6-1080735748
MegaVolt
2004-03-31 16:22
2004.05.23
Открыть папку на доступ.


1-1083938793
Cfytr
2004-05-07 18:06
2004.05.23
Папка Temp и папка, где находитсяя сам exe файл


1-1084345406
Stas
2004-05-12 11:03
2004.05.23
как в MDIChild убрать заголовок


7-1082388033
I_V_N_I_S_H
2004-04-19 19:20
2004.05.23
Скорость CD-ROM