[C] Problem z tablicą dynamiczną

0

Napisałem program który pobiera kopiuje zawartość pliku do tablic, a następnie je wyświetla.
Na razie chcę stworzyć tylko dynamiczną tablice jednowymiarową lecz pojawiają się problemy

#include <stdio.h>
#include <cstringt.h>
#include <stdlib.h>

#define DLUGOSC_LINII 99
#define WIERSZY 9
char final[WIERSZY][DLUGOSC_LINII];

void string_copy(char to[], char from[]){
    for (int i=0; ; i++){
        to[i]=from[i];
        if(to[i]==NULL)break;
    }
}

int main(){
    int dlugosc=99;//dlugosc linii
    int i=0;
    //char *line = (char *) malloc(sizeof(char)*dlugosc );
    char line[99];
    FILE *file = fopen ("file.txt", "r");
    while (fgets (line, sizeof line, file) != NULL){
        string_copy(final[i],line);
        i++;
    }
    fclose (file);
    for (int a=0;a<9;a++){
        printf("%s",final[a]);
    }
    return 0;
} 

Taki kod działa, lecz jeśli od-komentuje linijkę

    char *line = (char *) malloc(sizeof(char)*dlugosc );

To już jest źle. Jak sobie z tym poradzić.
Po prostu nie chcę używać DEFINE, do wymiar tablicy zależy od ilości wierszy (i jego długości)

Ogólnie jak sobie poradzić żeby zdefiniować rozmiar tablicy nie z początku a w środku programu?

0

line jest wskaźnikiem, zatem sizeof zwróci Ci rozmiar wskaźnika, a nie pamięci, na którą wskazuje. Tak zrób:

char *line = (char *) malloc(sizeof(char)*dlugosc );

...

while (fgets (line, dlugosc, file) != NULL) { ... } 
0

Dzięki

0

Poza tym cieknie ci.

0

a propoS dynamicznej deklaracji tablicy. Ostatnio spotkałem się z takim zapisem:

    int t, n, **tab;
    cin >> t;
    tab = new int*[t];
    for(int i = 0; i < t; i++)
    {
            cin >> n;
            tab[i] = new int[n];
    }

Czy to jest poprawne?

0

Jest.

0
#define DLUGOSC_LINII 99
int dlugosc=99;//dlugosc linii
char line[99];

Dlaczego nie używasz stałej którą sam zdefiniowałeś?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0