Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Еще 1 Легкий вопрос теперь про приведение типов. [D6, Win2k]


bloodman ©   (2004-09-03 18:16:00) 

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


Palladin   (2004-09-03 20:25:00) [1]

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


bloodman   (2004-09-03 19:32:00) [2]

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


Palladin   (2004-09-03 19:32:00) [3]


> bloodman ©   (03.09.04 19:27)

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


bloodman   (2004-09-03 19:27:00) [4]

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


Palladin   (2004-09-03 19:01:00) [5]

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;


Fay   (2004-09-03 18:54:00) [6]

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


bloodman   (2004-09-03 18:50:00) [7]

а все таки  ? =)


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

не стОит

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


bloodman   (2004-09-03 18:35:00) [9]

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


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


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

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


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

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


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

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

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


bloodman   (2004-09-03 18:30:00) [12]

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

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


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


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

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


Palladin   (2004-09-03 18:25:00) [14]


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

a:String[201];

a[201]:=#0;

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


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


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

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


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


> bloodman ©   (03.09.04 18:16)  

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

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


bloodman   (2004-09-03 18:22:00) [17]

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


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

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


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

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


Palladin   (2004-09-03 18:20:00) [19]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо