Zdravim vsetkych. Casto vydavam v kode fgets() napr. fgets(buffer,256,stdin), ale nerozumiem co presne fgets robi, kedy je fgets vhodne pouzit. Pozrel som par stranok ale stale tomu nerozumiem. ten isty problem mam s getline. Napr. while(getline(cin, text)). Vedel by mi to niekto jedoducho vysvetlit?
Fórum › C / C++
Fgets() nerozumiem tomu
Takove gets(buffer) bere jeden radek ze vstupu (obvykle klavesnice, ale jde do toho presmerovat temer cokoliv) - Nevyhoda je, ze buffer ma predem znamou velikost, a gets netusi, jakou. Tyhle fukce jsou vetsinou uz i nahlasene jako nebezpecne pri kompilaci.
Proto se pouziva fgets, kteremu se zadava i maximalni velikost retezce v bufferu. Je to funkce primarne urcena pro soubory (od toho ten prefix f), proto se tomu musi predhodit i ten stdin coz je standardni vstup (je totiz bran taktez jako "soubor", ikdyz v nem nejde skakat).
To plati pro C.
V C++ jsou uz mnohem lepsi moznosti, co se tyce nacitani libovolne dlouheho retezce - knihovna <string> a jeji varianta nacitani radku std::getline, ktera ocekava stream (tady je to std::cin, jakozto stdin) a std::string text; jakozto "neomezeny buffer" proste nacte cely radek. Jedno jak dlouhy. To uz je to nejbezpecnejsi a nemusi se resit veci jako to, ze se nacita radek na vickrat u fgets nebo ze to prepisuje pamet za bufferem jako u gets.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Trochu viac nerozumiem tomu cos — založil Miro1701
Co tomu říkáte — založil Alan
Funkcia fgets() — založil LuKeSkO
Vstup pomocí fgets — založil Zelenáč Uplný
Moderátoři diskuze