[Çözüldü] Bir pointer array üzerinde değişiklik yapıldığında (seg fault) hata vermemesi

Başlatan blacksnow, 20 Temmuz 2015 - 16:35:47

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

blacksnow

Aşağıdaki kodda açıklama satırını eklersem month değişkenine "string" yazılıyor.Normalde pointer' ın içindeki değeri değiştirmem yasak.Yoksa segmentation fault hatası almalıyım.fscanf karakterleri tek tek month değişkenine yazıyor diye biliyorum.Eğer öyleyse "string" month değişkeninin içine nasıl yazılabiliyor?Neden segmentation fault hatası almıyorum.Açıklama satırında sadece pointer' ın adresini yazdırıyorum.Bu kod nasıl oluyorda programın çalışmasını etkiliyor?
#include <stdio.h>

int main()
{
char *month;
//printf("%p\n", month);

FILE * file;
file = fopen("tutorial", "r");

fscanf(file, "%s", month);

printf("%s\n", month);

fclose(file);
return 0;
}

tutorial dosyasının içeriği:
string

Not 1: Yazdığım kodların beklenmedik davranışlar gösterebileceğini biliyorum fakat yine de merak ediyorum.Şimdiden teşekkürler.
Not 2: Başlığın pek fscanf ile ilgisi yok gibi ama daha iyi bir şey aklıma gelmedi.Başlık daha uygun bir şekilde değiştirildi.

Amenofis

tutorial adlı dosyada "string" mi yazıyor yani? Pek anlaşılmıyor yazdıkların.

Yaptığın şey tanımsız davranış olduğu için derleyici herhangi bir hata vermeye zorlamaz. Ben denediğimde hata verdi, demek ki gerçekten tanımsızmış. Bilerek hata yapıp bunu anlamlandırmaya çalışmak ta mantıksız.

blacksnow

Alıntı yapılan: Amenofis - 21 Temmuz 2015 - 14:04:33
tutorial adlı dosyada "string" mi yazıyor yani? Pek anlaşılmıyor yazdıkların.

Yaptığın şey tanımsız davranış olduğu için derleyici herhangi bir hata vermeye zorlamaz. Ben denediğimde hata verdi, demek ki gerçekten tanımsızmış. Bilerek hata yapıp bunu anlamlandırmaya çalışmak ta mantıksız.
tutorial dosyasında sadece "string" yazmakta.Yaptığım şey mantıksız fakat yine de merak ettim.Programa yorum satırını eklemeden hata veriyor, olması gerektiği gibi.Ben de yorum satırını eklediğimde çalışıyor.Merak ettiğim de şu, bir pointer array'i oluşturduğumuzda, bu içine koyduğumuz char,int herneyse sadece okunabilir belleğe yazılıyor diye biliyorum ve fscanf fonksiyonunda tek tek dizinin elemanlarını kopyalıyor diye biliyorum.Yani hata almalıyım.

month pointer'i ilk başta hiçbir şey belirtilmediği için belki hem yazılabilir hem okunabilir belleğin adresini tutuyor olabilir diye düşünüyorum.Bu şekilde çalıyor olabilir, tabi daha farklı bilmediğim şeyler de olabilir.Sonuç olarak dediğiniz gibi yaptıklarım biraz mantıksız.Teşekkürler cevabınız için.

-DıLgEş-

Pointere ilk değer ataması yapılmamış. C dili de kendi kendine o pointeri dolduramıyor tabii. Önce pointere ilk değeri ver daha sonra yorum işaretini kaldır. Zaten daha sonra pointer üzerinde değişiklik yapılmış.
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

blacksnow

Alıntı yapılan: nurullahisrgan - 22 Temmuz 2015 - 13:27:43
Pointere ilk değer ataması yapılmamış. C dili de kendi kendine o pointeri dolduramıyor tabii. Önce pointere ilk değeri ver daha sonra yorum işaretini kaldır. Zaten daha sonra pointer üzerinde değişiklik yapılmış.
pointer' a ilk değeri vermediğimden bunlar oluyordu zaten.Doğru kullanımı elbette dediğiniz gibi.Ben sadece merakımdan dolayı denemeler yapıyordum.Yardım etmeye çalışanlara tekrardan teşekkürler.

-DıLgEş-

@blacksnow
   string kelimesini bir de böyle dene;

   char *month[10];
   ...
   fscanf(file, "%s", month[10]);
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..