![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Еще 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?