![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure Delaem(var v: array of char;i:integer);
var
Form1: TForm1;
v: array of char;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=StrToInt(Edit1.Text);
SetLength(v,i);
Delaem(v,i);
end;
procedure Delaem(var v: array of char;i:integer);
var j:integer;
begin
for j:=0 to i do
v[j]:=char(j+10);
end;
end.выдает ошибку [Error] Unit1.pas(35): Incompatible types: 'Array' and 'dynamic array' что нужно исправить? |
|
#2
|
||||
|
||||
|
Попробуй так.
Код:
unit Unit1;
interface
...
type
...
DynCharArray: array of char;
procedure Delaem(var v: DynCharArray; i:integer);
var
Form1: TForm1;
v: DynCharArray;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=StrToInt(Edit1.Text);
SetLength(v,i);
Delaem(v,i);
end;
procedure Delaem(var v: DynCharArray; i:integer);
var j:integer;
begin
for j:=0 to i -1 do
v[j]:=char(j+10);
end;
end. |
|
#3
|
|||
|
|||
|
спасибо. А вот еще проблема
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type aoc = array of char;
procedure Delaem(var v: aoc;i:integer);
var
Form1: TForm1;
v: aoc;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=StrToInt(Edit1.Text);
SetLength(v,i);
Delaem(v,i);
end;
procedure Delaem(var v: aoc;i:integer);
var j,LocUkazatel:integer;
metka: string;
BufStr: string;
begin
metka:= chr(33)+chr(34)+chr(35);
for j:=0 to i-1 do
v[j]:=char(j+30);
LocUkazatel:= pos(metka, v);
BufStr:=Copy(v,LocUkazatel+3,2);
end;
end.выдает ошибки [Error] Unit1.pas(47): Incompatible types [Error] Unit1.pas(48): Incompatible types: 'String' and 'aoc' как их убрать? |
|
#4
|
||||
|
||||
|
Код:
LocUkazatel:= pos(metka, string(v)); BufStr:=Copy(string(v),LocUkazatel+3,2); ![]() |
|
#5
|
|||
|
|||
|
в данной программе, которую я привел для примера, в принципе работает. Но в реальной проге если так записывать вылетает ошибка о неправильном доступе к памяти
|
|
#6
|
||||
|
||||
|
Это, скорее всего, из-за того, что вы забыли про нолик на конце строки.
И зачем придумывать свой велосипед, когда есть PChar и String? Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
v2: PChar;
begin
i:=StrToInt(Edit1.Text);
GetMem(v2, i+1);
ZeroMemory(v2, i+1);
Delaem(v2, i);
FreeMem(v2, i+1); //если уже не нужна, то не забываем освободить память
end;
procedure Delaem(v: PChar; i:integer);
const
metka = #33#34#35;
var
j, LocUkazatel: integer;
BufStr: string;
begin
for j:=0 to i-1 do
v[j]:= char(j+30);
LocUkazatel:= pos(metka, String(v));
BufStr:=Copy(String(v), LocUkazatel+3, 2);
end;Последний раз редактировалось Karsh, 06.08.2011 в 13:11. |