Fórum Problema em função com string em delphi 2009 #371727
29/06/2009
0
for i:=1 to ord(s[0]) do
afirmando :
[Pascal Error] libelisoft.pas(1061): E2157 Element 0 inaccessible - use ´Length´ or ´SetLength´
alguém pode me dá uma luz ?
função completa :
function CryptSample(Value, Tipo : string) : string;
var
i : integer;
s : string;
c : array[0..255] of byte absolute s;
begin
i := 0;
try
if (Tipo= ´D´) then
begin
s:=Value;
for i:=1 to ord(s[0]) do //dá erro aqui ...
c[i] := 23 xor c[i];
end
else begin
s:=Value;
for i:=1 to Length(s) do
s[i] := char(23 xor ord(c[i]));
end;
finally
Result := s;
end;
end;
Elixandre
Curtir tópico
+ 0Posts
29/06/2009
Crash
Variavel := Ord(C[X]);
for I := 1 to Variavel do
Gostei + 0
29/06/2009
Crash
strings começam na posição 1
Gostei + 0
29/06/2009
Elixandre
então s[0] na função até o delphi 2007 funcionava ... qualquer ajuda será em vinda obrigado !!!!
Gostei + 0
29/06/2009
Emerson Nascimento
s[0] não funciona do Delphi 7 nem no Delphi 2006.
use a função length() para retornar o tamanho, assim como está sendo indicado na mensagem que o compilador retornou..
Gostei + 0
30/06/2009
Uasan
Como o emerson disse você deve colocar:
for i:=1 to ord(Length(s)) do
[]´s
Gostei + 0
30/06/2009
Elixandre
function TForm1.CryptSample(Value, Tipo: AnsiString): AnsiString;
var
i : integer;
s : AnsiString;
c : array[0..255] of byte absolute s;
begin
i := 0;
try
if (Tipo= ´D´) then
begin
s:=Value;
//for i:=1 to ord(s[0]) do - tava antes ...
for i:=1 to ord(Length(s)) do
c[i] := 23 xor c[i];
end
else begin
s:=Value;
for i:=1 to Length(s) do
s[i] := Ansichar(23 xor ord(c[i]));
end;
finally
Result := s;
end;
end;
só q encriptar funcionar direto ... mas se mando decriptar aparece o erro : First chance exception at $7C812AEB. Exception class EAccessViolation with message ´Access violation at address 00404D30 in module ´Project1.exe´. Read of address 17B1044A´. Process Project1.exe (2472)
alguma susgestão pessoal ?
Gostei + 0
30/06/2009
Emerson Nascimento
function TForm1.CryptSample(Value, Tipo: AnsiString): AnsiString; var i : integer; s : AnsiString; c : array of byte absolute s; begin try s := Value; if (Tipo = ´D´) then for i := 0 to Length(s)-1 do c[i] := 23 xor c[i] else for i := 1 to Length(s) do s[i] := Ansichar(23 xor ord(c[i-1])); finally Result := s; end; end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)