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;
}