Главная страница
    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.47 MB
Время: 0.04 c
1-1083822876
Girder
2004-05-06 09:54
2004.05.23
Проблемма с отладчиком в Delphi 7


14-1083855046
Knight
2004-05-06 18:50
2004.05.23
Что удобнее ADO и BDE?


7-1081922752
Евгыш
2004-04-14 10:05
2004.05.23
AsyncPro, получение блока данных


1-1084350468
AngelSAI
2004-05-12 12:27
2004.05.23
Печать таблицы


1-1083926326
som
2004-05-07 14:38
2004.05.23
Import данных с MS Excel





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский