Главная страница
    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.48 MB
Время: 0.037 c
14-1083809091
Думкин
2004-05-06 06:04
2004.05.23
С днем рождения! 6 мая


1-1083750540
Alek_1
2004-05-05 13:49
2004.05.23
А как использовать DECIMALDIGITS?


8-1078660834
S_FreemAn*[wiZard]
2004-03-07 15:00
2004.05.23
Компонент Delphi


1-1083758373
Дмитрий
2004-05-05 15:59
2004.05.23
Как удалить файл с диска и сохранить в его в корзине?


3-1082982964
avgur
2004-04-26 16:36
2004.05.23
вопрос доступа к данным в сети





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский