Jestli by to bylo v C++, tak práci usnadní std::string a std::vector
hu
edit: v C by se na to dalo jít např takto:
1. alokuji jednorozměrné pole char a načtu do něj celý soubor. Znak EOF nahradím znakem s hodnotou 0x00. Ze souboru se stal "maxiřetězec"
2. Alokuji pole ukazatelů na char.
3. pomocí strtok projdu "maxiřetězec", funkce nahradí každý středník znakem s hodnotou 0x00 a vrátí ukazatel na takto vzniklý řetězec
4. ukazatel vrácený funkcí strtok uložím do pole ukazatelů. Pokud je toto pole malé, realokuji ho.
Řetězce budou poskládané za sebou v paměti, to může být výhoda při jejich dalším zpracování. Nevýhodou je zpracování souboru ve dvou cyklech - načtení a rozdělení na řetězce.
Druhý postup je číst soubor po znacích. V takovém případě potřebuješ před započetím čtení každého řetězce alokovat pro něj paměť a ukazatel uložit do pole. Paměť pro řetězec musíš alokovat a realokovat podle velikosti řetězce, stejně tak pole musíš alokovat a realokovat podle počtu řetězců. V tomto případě mohou být řetězce roztroušené různě po paměti. Výhodou je pro změnu zpracování v jednom cyklu.
hu