Текущий архив: 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.48 MB
Время: 0.037 c