Konuyu görüntüle
IUCODERS FORUM > Programlama > C / C++ > Array döndüren fonksiyon adreslerini tutma
Yazar
mrflz


avatar
Luleburgaz
admin
Kayıt: 15.06.2006
04.05.2010-18:02 #68479
Başlığa ne yazsam bilemedim ama şöyle uzun uzadıya sorabilirim

random string ureten bir fonksiyonum var ( char *RandomWord(char *word, int start, int end) )

ve bana geri donuste bir string dizi donduruyor.

ben bu fonsiyonu donguye sokup n kez donecek ve RandomWord' ün her geri dondurdugu dizinin adresini yine bir dizide tutmak istiyorum
while (x<n) {
	arr=RandomWord(word , start, end);//olusturulan kelimeler alındı
	x++;
}



yani bu arr nin her donus için adresini n boyutunda diziye nasıl alabilirim. bir dizi pointer sacmalamacası yasıyorum.. reset lazım d ohd oh






I see the ghosts of navigators but they are lost







Yazar
enginkdal


avatar

Kayıt: 09.01.2008
04.05.2010-18:49 #68481
while içinde

dizin[x]=arr; demek yetmiyor ki???





B?ZLER PAZARLiK DEGiL MEZARLIK DOSTLARIYIZ.






Yazar
mrflz


avatar
Luleburgaz
admin
Kayıt: 15.06.2006
04.05.2010-18:54 #68482
aslında yapmak istediğim sey dizi içinde dizi tutmak ama bunu yaparken dizi içinde diğer dizilerin baslangıc adreslerini tutmak <





I see the ghosts of navigators but they are lost







Yazar
idristas


avatar
istanbul
Kayıt: 26.02.2010
04.05.2010-19:06 #68483

char *kelimeDizisi[n];
x=0;
1. while (x<n) {
2. kelimedizisi[x]=RandomWord(word , start, end);//olusturulan kelimeler alındı
3. x++;
4. }





Yazar
mrflz


avatar
Luleburgaz
admin
Kayıt: 15.06.2006
04.05.2010-20:15 #68484
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 100

char *RandomWord(char *word, int start, int end) {
   int len = rand()%(end-start) + start;
   word [len] = 0;
   while (len) {
         word [--len] = 'A' + rand () % 26;
   }
   return word;
}

int main() {
    int n=10, x=0, start=3, end=10;
    char word[SIZE], *arr_;
    
    system("CLS");

    srand((int)time(NULL));
    while (x<n) {	
          arr_=RandomWord(word , start, end);
          //aslında burada RandomWord fonksiyonun dondurdugu dizinin adresini almak istiyorum ve bunları her donuste bir dizide tutmak istiyorum (burada diziyi alıyorum ben)
          printf(" n	%d - %s n	", x+1, arr_);
          x++;
    }
    system("PAUSE");
    return 0;    
}


kod bu arkadaşlar temizledim pakladım <<

ama hala istedğimi alamadım :D.. amasyalı oralarda mı :D





I see the ghosts of navigators but they are lost







Yazar
tensai


avatar
istanbul
Kayıt: 05.10.2009
04.05.2010-20:36 #68485
mrflz yazdi
 

......

Ne istediğini net olarak anlatabilir misin. Yazdığın fonksiyon zaten bu dizinin(word) adresini döndürüyorthinking





Bilginin efendisi olmak için calismanin usagi olmak sarttir.







Yazar
extreme


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
04.05.2010-20:39 #68486
mrflz yazdi
 
amasyalı oralarda mı :D


Şu tarz bişey işini daha iyi görür bence matris gereksiz yer kaplıyo ama illa matris diyosan bakarım bi dahabiggrin

#include <stdio.h>
#include <stdlib.h>

char * randomString(int maxLenght) {
    int lenght = rand() % maxLenght;
    char* word = (char*) malloc(lenght * sizeof (char));
    for (int i = 0; i < lenght; i++) {
        *(word+i) = 'a' + rand()%26;
    }
    return word;
}

char** randomStringArray(int size,int maxStringLenght){
    char** array = (char**)malloc(size*sizeof(char*));
    for(int i=0;i<size;i++){
        *(array+i) = randomString(maxStringLenght);
    }
    return array;
}


int main() {

    char** array = randomStringArray(10,10);
    for(int i=0;i<10;i++){
        printf("%s
",*(array+i));
    }

}






The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com





Yazar
mrflz


avatar
Luleburgaz
admin
Kayıt: 15.06.2006
04.05.2010-22:04 #68487
PHP de yapabliyor muyuz bu algoritma projesini ?!?! sinir olmak üzereyken <<





I see the ghosts of navigators but they are lost







Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
04.05.2010-23:16 #68489
Yazdığın kodda şöyle bir hata var; random ürettiğin karakter dizisinin başlangıç adresi SABİT. Yani her üretilen random string bellekte aynı yere yazılıyor. Dolayısıyla oluşturduğun string dizisinin tüm elemanları aynı bellek bloğuna işaret ediyor. Bunu engellemek için veri kopyalaması yapman gerekiyor. Bunun akabininde ikinci bir hata oluşuyor o da; pointer'ları kopyalayacağın dizi için baştan yer ayırmamış olman.

Kodu şu şekilde modifiye edebilirsin;

	int n=10, x=0, start=3, end=10;
	char word[SIZE], **arr_;

	// dizi icin yer ayir
	arr_ = (char**)malloc(sizeof(char*));
	for(int i=0; i<n; i++)
		arr_[i] = (char*)malloc(sizeof(char)*(SIZE+1));

	srand((int)time(NULL));
	while (x<n) {	
		// olusan stringi yeni alana kopyala
		sprintf(arr_[x], "%s", RandomWord(word , start, end));
		x++;
	}

	for(int i=0; i<n; i++)
		printf("\n	%d - %s\n	", i+1, arr_[i]);






Let`s make this world a better place to live !

Yazar
mrflz


avatar
Luleburgaz
admin
Kayıt: 15.06.2006
04.05.2010-23:46 #68490
clairvoyant yazdi
 
Yazdığın kodda şöyle bir hata var; random ürettiğin karakter dizisinin başlangıç adresi SABİT. Yani her üretilen random string bellekte aynı yere yazılıyor. Dolayısıyla oluşturduğun string dizisinin tüm elemanları aynı bellek bloğuna işaret ediyor. Bunu engellemek için veri kopyalaması yapman gerekiyor. Bunun akabininde ikinci bir hata oluşuyor o da; pointer'ları kopyalayacağın dizi için baştan yer ayırmamış olman.

Kodu şu şekilde modifiye edebilirsin;

	int n=10, x=0, start=3, end=10;
	char word[SIZE], **arr_;

	// dizi icin yer ayir
	arr_ = (char**)malloc(sizeof(char*));
	for(int i=0; i<n; i++)
		arr_[i] = (char*)malloc(sizeof(char)*(SIZE+1));

	srand((int)time(NULL));
	while (x<n) {	
		// olusan stringi yeni alana kopyala
		sprintf(arr_[x], "%s", RandomWord(word , start, end));
		x++;
	}

	for(int i=0; i<n; i++)
		printf("
	%d - %s
	", i+1, arr_[i]);



god bless you mannnnn

Modifiyeli yandan çarklı kod :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 100

char *RandomWord(char *word, int start, int end) {
   int len = rand()%(end-start) + start;
   word [len] = 0;
   while (len) {
         word [--len] = 'A' + rand () % 26;
   }
   return word;
}

int main() {
    int n=10, x=0, start=5, end=20;
    char word[SIZE], **arr_;  
    
    // dizi icin yer ayir
    arr_ = (char**)malloc(sizeof(char*));
    for(int i=0; i<n; i++)
       arr_[i] = (char*)malloc(sizeof(char)*(SIZE+1));

    srand((int)time(NULL));
    while (x<n) {	
      // olusan stringi yeni alana kopyala
      sprintf(arr_[x], "%s", RandomWord(word , start, end));
      x++;
    }
    for(int i=0; i<n; i++)
		printf("%d - %s", i+1, arr_[i]);
		
    system("PAUSE");
    return 0;    
}






I see the ghosts of navigators but they are lost







Yazar
mrflz


avatar
Luleburgaz
admin
Kayıt: 15.06.2006
05.05.2010-00:24 #68491
@extreme

linux-windows arasında farkediyor galiba bu olay şimdi denedim en sonunda netbeans ile ama Ubuntuda denedim Windows da cillop çalışan kod Linux da Segemnttion Errör verdi .. senin kodu denedim Linux Netbeans te oldu.. nedir anlamadım :S:S:S:





I see the ghosts of navigators but they are lost







Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
05.05.2010-01:06 #68493
Kodu eksik yazmışım, şöyle olacak:
arr_ = (char**)malloc(sizeof(char*)*n);





Let`s make this world a better place to live !

Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb