matematykaszkolna.pl
Tablice w C przydział pamięci Mariusz: Ponowny przydział pamięci na tablicę w C Jak wyglądałby taki przydział pamięci na przykładzie tablicy znakowej np chcemy wczytać zawartość pliku do tabilcy znakowej ale nie wiemy ile znaków będziemy potrzebować Myślę że tablica do której wczytujemy plik powinna być dwuwymiarowa (wskaźnik na wskaźnik) a ponowny przydział pamięci może się przydać gdy chcemy tylko raz czytać z dysku Wydaje mi się że stosując to podejście stracimy trochę więcej pamięci niż byśmy wczytywali linie w pliku do listy (jedno lub dwukierunkowej)
3 gru 10:01
g: Funkcja ftell w połączeniu z fseek podaje rozmiar pliku.
3 gru 10:14
Dziadek Mró6:
3 gru 12:22
Dziadek Mróz: ... FILE *fp = fopen(...); ... fseek(fp, 0, SEEK_END); int bytes = ftell(fp); http://www.cplusplus.com/reference/cstdio/ftell/ http://www.cplusplus.com/reference/cstdio/fseek/
3 gru 19:41
Mariusz: Ale czy użycie tych funkcji nie wiąże się z przeczytaniem pliku Poza tym jak póżniej użyć tego do zarezewowania pamięci na tablicę Co ze ponownym przydziałem pamięci Czy funkcja realloc jest przenośna (np funkcje z console input output nie są ) I jak zrealizować taki przydział z użyciem funkcji malloc , strcpy , strcat
3 gru 20:00
Dziadek Mróz: fseek po prostu zmienia punkt z jakiego będziesz czytał plik. Poszukaj kodu źródłowego to znajdziesz, że tam zmieniane są flagi i ustawienia pliku
3 gru 20:56
Mariusz: A co z własnym łańcuchem podobno do jego zrealizowania dobrym pomysłem będzie struktura drzewiasta Ja na razie bawiłem się trochę listą i strukturami na niej bazującymi
3 gru 21:08
Mariusz: Załóżmy że skorzystałbym z tych funkcji wtedy zarezerwować pamięć na tablicę z jednym wskaźnikiem ? Myślałem o tablicy z dwoma wskaźnikami To z tym plikiem to był tylko przykład jak wam się nie podoba to chętnie zobaczę wasz przykład kiedy przydatna byłaby zmiana rozmiaru tablicy
3 gru 21:18
Dziadek Mróz: pewnie chodzi o realloc() http://www.cplusplus.com/reference/cstdlib/realloc/ char *data = malloc(SZ * sizeof(char)); ... data = realloc(data, SZ+1);
3 gru 23:06