Originariamente inviato da sandrinolli
Cioe la matrice presente nel file tdm.dat puo avere differenti dimensioni...Io nn vorrei dover manualmente modificare di volta in volta il valore di N ed M ma vorrei che si assegnasse automaticamente ...Si potrebbe fare?
Certo che si può, ma in tal caso devi allocare la matrice nell'heap tramite malloc, e l'accesso ad essa diventa leggermente differente (anche se potresti considerarla come un singolo vettore 1x(N*M) durante il caricamento per comodità).
"In ogni caso anche così il tuo codice è potenzialmente a rischio di buffer overflow, dovresti terminare il ciclo, oltre che all'EOF, anche se finisce la matrice."
Non avevo letto questa parte...E quindi come dovrei fare?
Ad esempio così:
codice:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int * matrice;
int i,j;
FILE * inFile;
int width=0, height=0;
inFile = fopen("tdm.dat","r");
if(inFile==NULL)
{
fputs("Impossibile aprire il file.\n",stderr);
return EXIT_FAILURE;
}
/* Leggi i valori di larghezza e altezza */
if(fscanf(inFile, "%d %d", &width, &height)!=2)
{
fputs("Impossibile leggere le dimensioni dell'array dal file.\n",stderr);
fclose(inFile);
return EXIT_FAILURE;
}
/* Alloca la memoria necessaria */
matrice=malloc(sizeof(*matrice)*width*height);
if(matrice==NULL)
{
fputs("Impossibile allocare la memoria per l'array.\n",stderr);
fclose(inFile);
return EXIT_FAILURE;
}
/* Leggi i valori dalla matrice, considerandola come un vettore di lunghezza width*height
for(i=0; i<width*height; i++)
{
if(fscanf("%d", &array[i])!=1)
{
fputs("Il file non contiene abbastanza dati.\n",stderr);
fclose(inFile);
return EXIT_FAILURE;
}
}
/* Visualizza i vettori della matrice, considerandola ora come una matrice di larghezza width e altezza height
for(i=0; i<height; i++)
{
for(j=0; j<width; j++)
printf("matrice[%d][%d]=%d", i, j, matrice[i*width+j]);
}
return EXIT_SUCCESS;
}