getline fonksiyonunun 2. parametresi ?

Başlatan avasl, 26 Ocak 2021 - 00:46:44

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

avasl

Merhabalar,
Temel yapısı şu şekilde olan:
  bytes_read = getline (&my_string, &nbytes, stdin);
getline fonksiyonunu C dilinde rahatlıkla kullanıyorum fakat 2. parametrenin amacını ve mantığını bir türlü tam anlayamadım. Man sayfasında diyor ki: "The second parameter is a pointer to a variable of type size_t; this parameter specifies the size in bytes of the block of memory pointed to by the first parameter. ".

Bunu da yarım yamalak anladım ama ben 2. parametreyi sıfır olarak seçtiğim zaman mantıken okuyamaması lazım. Ya da oraya yazdığım değerden daha fazla karakter okumaya çalışırsam da. Ama hatasız şekilde okumaya devam ediyor. Bu 2. parametresinin amacı ve mantığı nedir bu durumda ?

Şurada sormuşlar
https://stackoverflow.com/questions/41196543/what-is-the-purpose-of-the-second-parameter-in-getline

Ama pek kafama oturtamadım yine cevabı. Bilen/anlatabilen varsa çok ikram olur....

Collorpus

#1
Stackoverflow da yazılanlara göre ilk parametredeki string getline tarafından reallocate ediliyor ve n de ona göre güncelleniyormuş bende denedim ve 128 den fazla karakter girmedikçe n in 128'e eşit olduğunu gördüm. Sonuç olarak ikinci parametre ye adresi verilen size_t değişken getline'ın ayırdığı alanı kontrol etmek için kullanılabilir sanıyorum.

Edit : n ikinci parametreye verilen size_t

avasl

Alıntı yapılan: Collorpus - 27 Ocak 2021 - 02:50:17
Stackoverflow da yazılanlara göre ilk parametredeki string getline tarafından reallocate ediliyor ve n de ona göre güncelleniyormuş bende denedim ve 128 den fazla karakter girmedikçe n in 128'e eşit olduğunu gördüm. Sonuç olarak ikinci parametre ye adresi verilen size_t değişken getline'ın ayırdığı alanı kontrol etmek için kullanılabilir sanıyorum.

Edit : n ikinci parametreye verilen size_t

Üstad öncelikle teşekkür ederim. Ben de buna yakın anladım ama kafama yatmayan şu: Madem ikinci parametre, girilen karakterin uzunluğuna göre getline tarafından güncelleniyorsa, bu ikinci parametrenin lüzumlu bir işlevi yok o zaman. Çünkü ona sıfır da versem, getline yine otomatikmen karakterin uzunluğuna göre yer tahsis ediyor ve hiçbir türlü overflow durumu olmuyor ise, ikinci parametrenin işlevini anlayamıyorum yine.

Collorpus

Rica ederim , parametre getline'ı kısıtlamak için kullanılsaydı adres değil değer isterdi diye düşünüyorum .Ben aslen c++ da daha deneyimliyim ve c++ da stream sınıfları goodbit badbit gibi özel bitleri günceller sende onları :
while(stream.getstate() == goodbit)
gibi kullanabilirsin yine bu durumda :
while(n < 256) {
getline(...,&n,...);
}
gibi bir ifadeyle satirdaki karakter sayisi 256 yı gecince islemi sona erdirebilirsin. Dediğim gibi fazla c bilmiyorum başka faydalarıda olabilir.

programmer

Alıntı yapılan: avasl - 26 Ocak 2021 - 00:46:44
Merhabalar,
Temel yapısı şu şekilde olan:
  bytes_read = getline (&my_string, &nbytes, stdin);
getline fonksiyonunu C dilinde rahatlıkla kullanıyorum fakat 2. parametrenin amacını ve mantığını bir türlü tam anlayamadım. Man sayfasında diyor ki: "The second parameter is a pointer to a variable of type size_t; this parameter specifies the size in bytes of the block of memory pointed to by the first parameter. ".

Bunu da yarım yamalak anladım ama ben 2. parametreyi sıfır olarak seçtiğim zaman mantıken okuyamaması lazım. Ya da oraya yazdığım değerden daha fazla karakter okumaya çalışırsam da. Ama hatasız şekilde okumaya devam ediyor. Bu 2. parametresinin amacı ve mantığı nedir bu durumda ?

Şurada sormuşlar
https://stackoverflow.com/questions/41196543/what-is-the-purpose-of-the-second-parameter-in-getline

Ama pek kafama oturtamadım yine cevabı. Bilen/anlatabilen varsa çok ikram olur....
getline fonksiyonun ikinci parametresinin tipi "size_t *restricted" size_t unsigned int veya unsigned long int olabilir kaç bit derlendiğine bağlı olarak. Sonuçta bu değişken asyrılmak istenen belleğin yaqzıldığı yerin adresidir, malloc'a bu adreste yazan değer alıp konur. sıfır yazılırsa bu null pointer anlamına gelir.  Tabii null pointer hata olacağı için standar fonksiyon sıfırıncı adrese gidip bakmıyor, Orda koda göre işlem yapılıyor. Bu kodlar açık kaynaktır, istenirse incelenebilir.