pointer kullanarak Fonksiyon ile string dizi döndürme ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Code_Monster
Üye
Mesajlar: 16
Kayıt: 09 Tem 2010 10:36

pointer kullanarak Fonksiyon ile string dizi döndürme ?

Mesaj gönderen Code_Monster »

Merhabalar.
Bir şekilde bi yerde fonksiyon ile string diziyi döndürmem gerekiyor fakat içerik boş geliyor integer dizi döndürmede bi sorun olmuyor ama :S

bu sorunsuz integer diziyi geri döndüren kod :

Kod: Tümünü seç

function Kisilik_tipini_belirle():pinteger;
var
asd:array [0..1] of integer;
begin

   asd[0]:=0;
   asd[1]:=1;

 Result:=@asd;

  end;

type
kisilik = function():pinteger;


procedure TForm1.Button1Click(Sender: TObject);
var
Kslk:^kisilik;
sonuc:pinteger;
begin
  Kslk^:=Kisilik_tipini_belirle;
  sonuc:=kslk^;
  ShowMessage(IntToStr(sonuc^));
end;
String olarak denediğim kod: (boş, hiçbir değer dönmüyor)

Kod: Tümünü seç

function Kisilik_tipini_belirle():PString;
var
asd:array [0..1] of String;
begin

   asd[0]:='0';
   asd[1]:='1';

 Result:=@asd;

  end;

type
kisilik = function():PString;


procedure TForm1.Button1Click(Sender: TObject);
var
Kslk:^kisilik;
sonuc:PString;
begin
  Kslk^:=Kisilik_tipini_belirle;
  sonuc:=kslk^;
  ShowMessage(sonuc^);
end;
değiştirdiğim tek şey pintegeri pstring ve integeri string yapmak.
neden böyle bir sorun oluyor aceba?
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: pointer kullanarak Fonksiyon ile string dizi döndürme ?

Mesaj gönderen vkamadan »

Merhaba ,

Bu işi pointer ile yapma zorunluluğunuz yoksa string dizi bir tip tanımlayıp fonksiyon dönüşüne bu tipi verin,

Kod: Tümünü seç

type TStrDizi = array of String ;

..
..

function StrDiziDondur : TStrDizi ;

kolay gelsin..
Volkan KAMADAN
www.polisoft.com.tr
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: pointer kullanarak Fonksiyon ile string dizi döndürme ?

Mesaj gönderen akdatilla »

merhaba
integer ile string arasında önemli bir fark var. integer veritipi sabit boyutlu 4 byte iken string veritipi 2gb a kadar çıkabiliyor. Bunun için string veritipini tek bir bellek bloğunda gibi düşünmemek gerek.
Bir bellek bloğu maksimum 32 kb diye hatırlıyorum. Ancak eğer kullandığımız string bilgi 256 karakterden az ise aşağıdaki gibi bir çözüme gidilebilir .
kolay gelsin.

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
 sstr=string[255];
 dsstr=array [0..1] of sstr;
 pdsstr=^dsstr;
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function Kisilik_tipini_belirle():pdsstr;
var
   asd:pdsstr;
begin
   new(asd);
   asd[0]:='0';
   asd[1]:='1';

   Result:=asd;

end;


procedure TForm1.Button1Click(Sender: TObject);
var
   sonuc:pdsstr;
begin
  sonuc:=Kisilik_tipini_belirle;
  ShowMessage(sonuc^[0]);
  dispose(sonuc);
end;

end.
Code_Monster
Üye
Mesajlar: 16
Kayıt: 09 Tem 2010 10:36

Re: pointer kullanarak Fonksiyon ile string dizi döndürme ?

Mesaj gönderen Code_Monster »

Çok teşekkür ederim deneyeceğim ilk fırsatta.
ilk yöntem işimi görüyor pointer olmadan da yapılabiliyormuş.
ama bu pointerin neden olmadığınıda çok merak ediyordum şimdi mantık oturdu.
çok teşekkür ederim ilgilendiğiniz için
Cevapla