[C] Dynamická alokácia dvojrozmerného poľa

Programovacie jazyky, rady, poradňa...
Hensym
VIP
VIP
Používateľov profilový obrázok
Príspevky: 6978
Registrovaný: 24 apr 2011, 0:53
Bydlisko: Zvolen

[C] Dynamická alokácia dvojrozmerného poľa

Príspevok od používateľa Hensym »

Čaute, ďalší problém, ktorý už pol dňa riešim v C.

Predstavte si, že mám súbor:

Prvy riadok bla bla
Druhy riadok bla bla
Treti riadok bla bla

Prva riadok 2 bla bla
Druhy riadok 2 bla bla
Treti riadok 2 bla bla

... a takto sa opakujúci rovnaký počet riadkov s nejakými údajmi.

Píšem funkciu, v ktorej potrebujem určitý riadok (v mojom prípade napríklad každý piaty riadok súboru) nahrať do samostatného stringu.

Kostra funkcie je takáto:

Kód: Vybrať všetko

funkcia(subor, ***pole){
     // while na pocitanie riadkov
     // zistenie poctu danych zaznamov (cize pocet riadkov deleno pocet riadkov v odstavci udajov v subore)
     // ked viem pocet riadkov ktore potrebujem, alokujem si jeden rozmer dvojrozmerneho pola:
     *pole = (char**) malloc (riadkov * sizeof(char*));
     
     // dalej tam mam:
     while(!feof(subor)){
          // skumam napr. kazdy piaty riadok (tie potrebujem), a meriam ich dlzku, ulozim to do premennej "dlzka" (toto funguje)

          P1: // teraz potrebujem alokovat druhy rozmer pola aby malo rozmer "dlzka", a bol by som schopny don narvat cely riadok

          // potrebujem zapisat tento riadok do tej casti pola - musim sa vratit v subore o "dlzka"-znakov naspat, to som spravil takto:
          while(dlzka_unget != dlzka){				
		          ungetc(c,f);
		          dlzka_unget++;
	       }

         P2: // teraz, ked som opat na zaciatku spravneho riadku, potrebujem tento riadok zapisat do uz alokovanej casti pola:
         fgets(*(*pole), dlzka, subor);  // mozno nejako takto?
     }
}
Zamerajte sa najmä na riadky P1 a P2, tam je problém, respektíve to neviem vyriešiť. Snáď rozumiete kostre tohto kódu. Ak potrebujete viac informácií, rád ich poskytnem. Vďaka. :)
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: [C] Dynamická alokácia dvojrozmerného poľa

Príspevok od používateľa pcsiete »

Neviem ti povedať či na to z hľadiska indexov ideš správne, dal si tu primálo kódu. Alokuješ riadkov riadkov, ale používaš každý piaty. Ďalšia vec je, že netreba zabudnúť na jeden bajt naviac pre ukončenie reťazca (\0).

Čo sa týka pointerov: keď máš char**, odindexuješ si riadok (pole[index];) a ostane ti pointer na reťazec (char*). Teda

Kód: Vybrať všetko

fgets(pole[riadok], dlzka, subor);
Hensym
VIP
VIP
Používateľov profilový obrázok
Príspevky: 6978
Registrovaný: 24 apr 2011, 0:53
Bydlisko: Zvolen

Re: [C] Dynamická alokácia dvojrozmerného poľa

Príspevok od používateľa Hensym »

Nie som si istý, či som správne pochopil. Možno mi to už pre dnešok moc nemyslí.
Prípadne, ak máš čas mrknúť sa na to, vedel by som ti do správy poslať kód tej funkcie pre lepší prehľad. Ak nie, nevadí. :)
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: [C] Dynamická alokácia dvojrozmerného poľa

Príspevok od používateľa pcsiete »

Hoď to tu, mrknúť sa na to ale teraz nemôžem.
Napísať odpoveď