/* takze uloha - zcela prakticka, keby sa mi chcelo tak to aj nakodim do toho projektu co som robil pre sama, ale isiel som lahsou cestou. Planujem to tam zmenit. Mam subor so zoznamom prikazov, ktore treba spustit. Priklad: /usr/bin/prikaz1 argument1 argument2 argument3 /usr/bin/prikaz2 /bin/prikaz3 argument1 argument2 Ja si tento subor s prikazmi nacitam a chcem, aby vysledok bol ulozeny v jednom 3 rozmernom poli typu char (tak, ze prvy rozmer bude NULLou terminovany zoznam prikazov, druhy rozmer budu NULLou terminovane prikazy s argumentami, a treti rozmer budu 0ou terminovane jednotlive znaky) Teda prikazy[0] = {"/usr/bin/prikaz1", "argument1", "argument2", "argument3", NULL} prikazy[1] = {"/usr/bin/prikaz2", NULL} prikazy[2] = {"/bin/prikaz3", "argument1", "argument2", NULL} prikazy[3] = NULL NULL terminacia sa robi preto, aby sme vedeli, kde sa konci prikaz, teda ked iterujem, tak takto char ** now; for (now = prikazy; now != NULL; now++); Ulohou teda je naalokovat potrebne miesto, nastrkat tam tie prikazy a vratit hotovy vysledok, teda typ char ***. Teraz to robim tak, ze si naalokujem miesto na (pocet_prikazov + 1) pointrov - teda v priklade, ktory som uviedol, naalokujem miesto na 4 pointre (3 na prikazy, posledny na NULL). Potom pre jednotlive prikazy robim alokaciu na (1 + pocet_argumentov + 1) pointerov (cesta k prikazu, argumentu a NULL). V priklade, ktory som uviedol to teda najprv bude 5 pre prikaz 1, potom 2 pre prikaz2 a 4 pre prikaz3. No a potom pre kazdy prikaz/argument robim alokaciu na pocet znakov daneho argumentu/prikazu (+1 na terminovaciu nulu). Vysledok je taky, ze funkciu malloc volam dohromady, v uvedenom priklade, 12-krat. To je dost neefektivne, hlavne preto, ze sa to cele da spravit tak, ze alokovat budem iba raz, a naalokujem si tolko pamate, aby som tam ulozil vsetky pointre a aj jednotlive argumenty. Ulohou teda je napisat program, ktory bude nacitavat prikazy - jeden prikaz na riadok, tak, ze medzeri medzi slovami budu chapane ako dalsi argument. Prazdny riadok na vstupne nech je chapany ako koniec vstupu. Program nech naalokuje potrebne mnozstvo pamate na ulozenie vsetkych prikazov do pola tak, ako to bolo popisane vyssie, a nech tam samozrejme tieto prikazy ulozi. Na vystup zatial tento program nemusi pchat nic. Priklad vstupu, aby vygeneroval pole ako bolo popisane vyssie -- zaciatok -- /usr/bin/prikaz1 argument1 argument2 argument3 /usr/bin/prikaz2 /bin/prikaz3 argument1 argument2 -- koniec -- */