PDA

Tam Sürümünü Görmek İçin : C de string arrayi oluşturma


gokhanozbulak
28/04/2007, 13:13
Arkadaşlar aşağıdaki gibi bir kodum var:


char *leagues[MAX_LEAGUE_NUMBER]; //MAX_LEAGUE_NUMBER = 10, id_count = 0
...
while(fgets(line,MAX_LINE_LENGTH,leagues_file) && id_count < MAX_LEAGUE_NUMBER){
leagues[id_count] = line;
printf("%d -) %s\n",id_count + 1,line);
id_count++;
}leauges'ı string arrayı olarak düşündüm ve dosyadan okuduğum(logical file = league_file) satırları bu arrayın componentleri olarak atamak istedim.Mesela dosyamda

Ali
Veli
Hakkı

varsa arrayiminde
leagues = {Ali,Veli,Hakkı} şeklinde olmasını bekledim, ancak dosyadan her line ı okuyuşta array o index'e kadar yeniden güncelleniyor. Mesela, Veli okundu diyelim

leauges = {Ali,Veli}

olması gereken yerde

leauges = {Veli,Veli}

oluyor, problem sanırım string arrayını yanlış deklare etmemden ya da yanlış ele almamdan kaynaklanıyor, ama hatayı bi türlü saptayamıyorum.


hakanergul
28/04/2007, 13:31
leagues[id_count] = line;

char *leagues[MAX_LEAGUE_NUMBER];

Bence şu iki satırdaki pointer kullanımıyla ilgili sorun var.

gokhanozbulak
28/04/2007, 13:40
Bana da öyle geliyor işte de bi türlü çözemiyorum problemi

quasimodo
28/04/2007, 14:10
fgets() fonsiyonu senin o ortada verdigin sayi
kadar karakteri okur ve ilk parametreyle gosterilen
adresten itibaren yerlestirir.
Senin fgets fonksiyonuna ikinci parametre olarak
sabit bir sayi vermen dosyanin icindeki butun isimlerin
ayni uzunlukta oldugu anlamina geliyor ki oyle degil sanirim.
Bu konuda sana fscanf() fonksiyonu yardimci olacaktir.

gokhanozbulak
28/04/2007, 16:05
Arkadaşlar problem line adlı değişkenden kaynaklanıyor, az önce debug ederken farkettik. line tek bir yeri gösteriyor ve line dan referans alan string array ının componentleri burayı static bindingteki gibi adreslilyolar, dolayısıyla line ın gösterdiği yerin değeri değiştiğinde string componentleri de bundan nasibini alıyor.

Değerli katkılarınız için çok teşekkür ederim.

quasimodo
28/04/2007, 16:26
Aslinda fgets() fonksiyonu
maximum o ikinci parametresi kadar karakter okuyor
eger yeni satir belirteci yada dosya sonu belirteci
ile karsilasirsa oraya kadar okuyor. Hangisi once olursa
yani...