PChar x String x Erro de Memória

Delphi

07/10/2003

Fala galera!

Criei a seguinte função, que retorna uma sub-string de uma strig de entrada:

function TPrincipal.Substring(palavra: string; inicio:integer; fim:integer): string;
var cobaia:PChar;
retorno:string;
begin
if (fim < 0) then fim:=StrLen(PChar(palavra));
StrCopy(cobaia,PChar(palavra[inicio]));
for inicio:=inicio+1 to fim do
StrCat(cobaia,PChar(palavra[inicio]));
retorno:=string(cobaia);
Result:=retorno;
end;

E a chamo, por exemplo, assim:
str := Substring(´Matheus´,2);

O código acima sempre retorna um ´EAccess Violation´...

Alguém sabe o que pode estar errado?

Obrigado,
Matheus.


Matheus

Matheus

Curtidas 0

Respostas

Beppe

Beppe

07/10/2003

Você está misturando strings com ponteiros p/ cadeia de strings, e nem alocando a memória que você quer usar.

Algumas dicas:

1) não use PChar como strings: o tipo String do Delphi faz a alocação de memória para você.
2) passe parâmetros string como const.

Cobaia aponta para lixo:
StrCopy(cobaia,PChar(palavra[inicio])); ... StrCat(cobaia,PChar(palavra[inicio]));


Se você necessitace de PChars, use

Cobaia := StrAlloc(Fim - Inicio + 1);
StrCat(StrEnd(Cobaia), PChar(Palavra[Inicio])));

Eu não sei com que intuito você escrevei esta rotina, mas ela é extremamente ineficiente.

Não sei se você sabe, mas a função Copy já faz isso...


GOSTEI 0
POSTAR