fonksiyondan dizi dondurme

Başlatan brlesc, 22 Eylül 2013, 18:06:52

brlesc

Kolay gelsin arkadaşlar..

keil da yazdıgım fonksiyondan donus tipi olarak boyutu belirli olmayan dizi dondurmek istiyorum.. fonksiyona girdiğim parametrelere göre max 40 karakter uzunlukta dizi dondurmek istiyorum yani kısaca.  Nette bi seyler buldum ama calısmadi bu konuda yardımcı olabilir misiniz..
edeb ya hu...

hasankara

c# tan bir örnek vereyim. belki böyle bir kullanım şeklini keil de anlayabilir.

--public static uint[] fonksiyon(Byte[] INBuffer){...  return ADCDeger;}

burada, daha öncesinde unsigned integer olarak tanımlanan ADCDeger dizisini fonksiyondan çıkarken geri gönderiyor.

fonksiyonu çağırırken,
--ADCGelen = user.fonksiyon(OUTBuffer); şeklinde bir kullanım söz konusu.

LukeSkywalker

const char dizi[10]={'a',12,1};
const char *ch,*ch2;

const char *dizidondur(char b)
{
  ch=dizi;
  return ch;
}

void main()
{

 dizidondur(5);
 ch2=dizidondur('a');

}

bu şekilde alabilirsiniz verileri.

fatih6761

C# veya Java için çok basit bir işlem olmasına rağmen C için güvenli değildir. Bellek sızıntısına yol açabilir(memory leakage). Fonksiyondan döndürmek istediğiniz diziyi malloc ile ayırmayı planlıyorsanız bunu fonksiyon dışında yapın. Yani fonksiyondan döndürmek yerine 40 byte'lık diziyi fonksiyona parametre olarak verin, fonksiyon içine istediğiniz yazıp geri dönsün.
char * foo()
{
    char * p = malloc(100);
    ...
    return p;
}

Bunun yerine:
int main()
{
    char dizi[40] = { 0 };
    foo(dizi);
}

void foo(char * d)
{
    d[0] = 0;
    d[1] = 1;
    ...
}

bunu tercih edin. Başta da belirttiğim gibi C# için böyle bir sıkıntı yok.

brlesc

anladım hocam eeprom dan veri okurken dediginiz yontemi kullanmıstım o sekilde devam  edeyim oyle ise.. cevaplarınız için tesekkur ederim..
edeb ya hu...

Gökhan BEKEN

Dizi döndermek değilde diziyi gönderirsek, fonksiyon içinde yapılan değişiklikler gönderdiğimiz diziyede etki eder, böylece dizinin dönüşünü almamıza gerek kalmaz. C dilinde böyle...

#include<stdio.h>
/* Kendisine verilen dizinin butun 
   elemanlarinin karesini alir */
void karesine_donustur( int [ ], int );
int main( void )
{
	int i;
	int liste[ ] = { 1,2,3,4,5,6,7 };
	for( i = 0; i < 7; i++ ) {
		printf( "%d ", liste[ i ] );
	}
	printf("\n");

	// Fonksiyonu cagiriyoruz. Fonksiyon geriye 
	// herhangi bir deger dondurmuyor. Diziler 
	// referans yontemiyle aktarildigi icin dizinin 
	// degeri bu sekilde degismis oluyor.
	karesine_donustur( liste, 7 );
	for( i = 0; i < 7; i++ ) {
		printf( "%d ", liste[ i ] );
	}
	printf("\n");
	return 0;
}
void karesine_donustur( int dizi[ ], int boyut )
{
	int i;
	for( i = 0; i < boyut; i++ ) {
		dizi[ i ] = dizi[ i ] * dizi[ i ];
	}
}

kaynak : http://www.cagataycebi.com/programming/c_programming/c_programming_11.html
Özel mesaj okumuyorum, lütfen göndermeyin.