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

Вниз

Еще 1 Легкий вопрос теперь про приведение типов.   Найти похожие ветки 

 
bloodman ©   (2004-09-03 18:16) [0]

Почему компилятор ругается , когда пишешь такую строку :
  PChar(a)
если
a: String[200];  a если а : String; то все нормально проходит???
Как это можно обойти. Работаю с записями  поэтому нужно указывать кол-во символов ...


 
Palladin ©   (2004-09-03 18:20) [1]

Есть разница между ShortString и LongString. String - указатель,  String[2000] массив Char из 2000 элементов... как же ты собрался привести 4 байта к 2000?


 
Palladin ©   (2004-09-03 18:22) [2]

Нолик лишний...


> массив Char из 2000 элементов

точнее из 201 элемента...


 
bloodman ©   (2004-09-03 18:22) [3]

понятно , а как можно привести к PСhar ? @a ??


 
Суслик ©   (2004-09-03 18:23) [4]


> bloodman ©   (03.09.04 18:16)  

меньше вопросов

в штаном хелпе по ф1 в разделе
object pascal reference\data types...\string types
очень хорошо рассказано про строки.
просто зафигански!
и про string, и про pchar и про все на свете...


 
Суслик ©   (2004-09-03 18:24) [5]


> bloodman ©   (03.09.04 18:22) [3]

pchar предполагает #0 на конце.
у a его нет


 
Palladin ©   (2004-09-03 18:25) [6]


>  как можно привести к PСhar ? @a ??

a:String[201];

a[201]:=#0;

и приводи наздоровье PChar(@a[1]);


 
Суслик ©   (2004-09-03 18:28) [7]


> Palladin ©   (03.09.04 18:25) [6]

только мусора много будет
скорее a[length(a)+1] := #0;


 
bloodman ©   (2004-09-03 18:30) [8]

Суслик ©   (03.09.04 18:28) [7]

>только мусора много будет
какого это мусора?


 
Суслик ©   (2004-09-03 18:31) [9]

какого, какого - случайного.

у тебя всегда строка длинной 200? Нет же: занято первые N символов. Если сделаешь как [6], то получишь - превые N симовлов ок, а дальше мусовр.


 
Palladin ©   (2004-09-03 18:33) [10]


> Суслик ©   (03.09.04 18:28)

Да верно.
Можно и a[a[0]+1]:=#0;


> [8] bloodman ©   (03.09.04 18:30)

Неиспользуемые элементы массива будут заполнены мусором... по моей ошибке PChar() будет выдавать чушь после рабочих символов размером в 200сти букв...


 
bloodman ©   (2004-09-03 18:35) [11]

аа понятно я тоже об этом подумал , только я думал что ты другое имеешь в виду. А вот такую функцию рационально использовать ?
function String2PChar( s:String):PChar;
begin
result:=PChar(s);
end;
?


 
Суслик ©   (2004-09-03 18:41) [12]

не стОит

и не спрашивай почему


 
bloodman ©   (2004-09-03 18:50) [13]

а все таки  ? =)


 
Fay ©   (2004-09-03 18:54) [14]

функция вернёт указатель куда-то.


 
Palladin ©   (2004-09-03 19:01) [15]

function ShortString2PChar(var s):PChar;
type
AOB=array [0..3] of byte;
Begin
AOB(S)[AOB(S)[0]+1]:=0;
Result:=PChar(@AOB(S)[1]);
End;

procedure TForm1.Button1Click(Sender: TObject);
var
s:string[5];
begin
s:="abv";
MessageBox(Application.Handle,ShortString2PChar(s),"fdff",MB_OK);
end;


 
bloodman ©   (2004-09-03 19:27) [16]

Моя функция тоже работает...


 
Palladin ©   (2004-09-03 19:32) [17]


> bloodman ©   (03.09.04 19:27)

естественно, ведь сначала компилятор проводит преобразование ShortString в LongString...


 
bloodman ©   (2004-09-03 19:32) [18]

Ну а в чем с ней проблема тогда?


 
Palladin ©   (2004-09-03 20:25) [19]

Просто чуть медленней



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

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

Наверх




Память: 0.5 MB
Время: 0.054 c
6-1089616921
Тимур
2004-07-12 11:22
2004.09.19
Сокеты


6-1089531062
Chop Suey
2004-07-11 11:31
2004.09.19
Quoted-printable реализация


14-1093867492
ydv
2004-08-30 16:04
2004.09.19
Метод Фолля


8-1088505767
sashok
2004-06-29 14:42
2004.09.19
Проигрывание видео на форме.


1-1093926113
Fktrc
2004-08-31 08:21
2004.09.19
Результат обработки сообщения