Salve a tutti,
A distanza di pochi minuti propongo un altro dilemma che mi impedisce di capire a fondo le matrici...

di seguito vi riporto il codice che ho utilizzato che prima funzionava e poi non funziona piu...
Il file è a progetto...

codice:
//main
#include "header.h"


int main (){
    
    matrice mat;
    int select=0;
    int rig=0;
    int col=0;
    
    printf("=== Benvenuti nel programma di gestione ==\n");
    printf("=== delle matrici==\n");
do{
      printf("Premere:\n");
      printf("1 Per inserire la matrice da tastiera\n");
      printf("2 Per salvare la matrice su file da file\n");
      printf("3 Per ordinare la matrice\n");
      printf("4 Per caricare la matrice da file\n");
      printf("5 per stampare la matrice\n");
      printf("\nInserire la scelta: ");
      scanf("%d",&select);
      
      
      
      
      if(select==1){
      do{                
      printf("\nInserire il numero delle colonne desiderato (Max%d): ",DIM);
      scanf("%d",&col);
      printf("\nInserire il numero delle colonne desiderato (Max%d): ",DIM);
      scanf("%d",&rig);
      }while(col<=0 || col>DIM && rig<=0 || rig>DIM);     
      }           
   
   
    
    
    switch (select){
           case(1):
                   leggi_tastiera(mat,rig,col);
                   break;
                   case(2):
                           salva_matrice(mat,rig,col);
                           break;
                           case(3):
                                   ordina_matrice(mat,rig,col);
                                   stampa_matrice(mat,rig,col);
                                   break;
                                   case(4):
                                           rig=carica_matrice(mat);
                                           col=rig;
                                           break;
                                           case(5):
                                                   stampa_matrice(mat,rig,col);
                                                   break;
                                                   case(6):
                                                           inserisci_valore(mat,&rig,&col);
                                                           break;
                                                   
           
           
           
           }
    
    
 printf("\n\nPer continuare premere 1 altrimenti 0: ");   
 scanf("%d",&select);
 
    
}while(select==1);
    
    system("PAUSE");
    return 0;
    }

//Le funzioni

#include "header.h"


    
void leggi_tastiera(matrice mat,int col,int rig){
     register int i,j;
     
     for(i=0;i<rig;i++){
                        for(j=0;j<col;j++){
                                           printf("\nInserire la stringa nella posizione %d-%d: ",i,j);
                                           scanf("%s",&mat[i][j]);
                                           }
                        }
     
     
     }    
     
void salva_matrice(matrice mat,int col,int rig){
     FILE*f1;
     register int i,j;
     
     f1 = fopen("matrice.txt","w");
     
     if(!f1){
             printf("Errore apertura file");
             }
             
          for(i=0;i<rig;i++){
                             for(j=0;j<col;j++){
                                                fprintf(f1,"%s\n",mat[i][j]);
                                                }
                             }   
     
     fclose(f1);
     
     if(fclose(f1)){
                printf("File salvato con successo");
                }else{
                      printf("Errore nel salvataggio del file");
                      }
     } 
     
//risolvere funzionamento!!!!!     
void ordina_matrice(matrice mat,int col,int rig){
     register int i,j,z;
     
     stringa temp;
     
    for(z=0;z<col;z++){
                        for(i=0;i<rig;i++){
                                           
                                           for(j=0;j<col;j++){
                                           if(strlen(mat[i][j-1])>strlen(mat[i][j])){
                                                                                strcpy(temp,mat[i][j-1]);
                                                                                strcpy(mat[i][j-1],mat[i][j]);
                                                                                strcpy(mat[i][j],temp);
                                                                                }                   
                                                              }
                                           }
                                           }
                                           
                                                        
                        
     }         
     
int carica_matrice(matrice mat){
     printf("\nCarico una matrice 4X4\n");
     register int i,j;
     FILE* f1;
     
     f1 = fopen("matrice.txt","r");
     
     for(i=0;i<4;i++){
                      for(j=0;j<4;j++){
                                       fscanf(f1,"%s",&mat[i][j]);
                                       }
                      }
     if(feof(f1)){
                  printf("\nIl file e' stato caricato con successo\n");
                  }else{
                        printf("\nErrore caricamento file\n");
                        }
     fclose(f1);
     
     return 4;
     }
     
void stampa_matrice(matrice mat,int rig,int col){
     printf("\nLa matrice attuale e':\n\n");
     register int i,j;
     for(i=0;i<rig;i++){
                        printf("\n");
                        for(j=0;j<col;j++){
                                           printf("%s ",mat[i][j]);
                                           }
                        }
     
  
  
     }     


// l'header
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DIM 10
#define DIM1 10
#define MAX 100


typedef char stringa[MAX];
typedef stringa matrice[DIM][DIM1];

//int leggi_file(matrice mat,int *col,int *rig);

void leggi_tastiera(matrice mat,int col,int rig);
void salva_matrice(matrice mat,int col,int rig);
void ordina_matrice(matrice mat,int col,int rig);
int carica_matrice(matrice mat);
void stampa_matrice(matrice mat,int rig,int col);
int inserisci_valore(matrice mat,int *rig,int *col);

Mi scuso per aver postato tutto questo codice ma penso che per dare un quadro completo bisogna passare tutto