[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