aïe,
ta matrice n'est pas de type char donc tu vas perdre plein de données avec fputc qui n'enregistre qu'un char ( 0

255 ), ce qui est illisible ouvert avec un éditeur de texte.
avec fprintf tu enregistre tes entiers écris en chiffres!! Donc pour les lire c'est un peu plus compliqué. Il faut, pour chaque nombre, récupérer ses chiffres ( et seulement ceux-là ), et faire l'opération inverse, convertir le nombre sous forme de chaîne en entier.
Mais je crois que le plus simple serait qqc comme ça pour écrire la matrice:
int tab[w][h];
for( int x = 0 ; x < w ; x++ )
for( int y = 0 ; y < h : y++ )
fwrite( &(tab[x][y]), sizeof( int ), 1, destination );
et comme ça pour la lire:
int tab[w][h];
for( int x = 0 ; x < w ; x++ )
for( int y = 0 ; y < h : y++ )
fread( &(tab[x][y]), sizeof( int ), 1, source );
encore plus simple si elle n'est constituée que d'un bloc de mémoire:
fwrite( tab[0], sizeof( int ) * w * h, 1, fichier );
fread( tab[0], sizeof( int ) * w * h, 1, fichier );
mais dans ces 2 cas ce ne sera pas lisible ouvert avec un éditeur de texte.
Si tu veux pouvoir lire les informations dans un éditeur de texte utilise fprintf et fgets, formate tes données en lignes et sépare les nombres par des virgules par exemple.
fgets te renverra les lignes, que tu analysera nombre par nombre avec la fonction atoi
Linux a un noyau, windows un pepin