Bonjour

J ai une petite question, par rapport a ma fonction, je l est ecrite de 2 facon différente et elle marche bien dans les deux cas mais laquelle est la mieux ? et quel est la réel différence ? voila la premiere variante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct stat *stat_fichier(char *nomFichier)
{	
	struct stat *fichier;
 
	fichier = malloc(sizeof(struct stat));
 
	if(!fichier)
	{
		fprintf(stderr,"Allocation impossible\n");
		exit(EXIT_FAILURE);
	}
 
	if(stat(nomFichier, fichier) != 0)
        {
               perror("fstat ");
               exit(EXIT_FAILURE);
        }
 
    return fichier;
}
et voila la deuxieme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct stat *stat_fichier(char *nomFichier)
{	
	void *fichier = NULL;
 
	fichier = (struct stat*)malloc(sizeof(struct stat));
 
	if(!fichier)
	{
		fprintf(stderr,"Allocation impossible\n");
		exit(EXIT_FAILURE);
	}
 
	if(stat(nomFichier, fichier) != 0)
    {
        perror("fstat ");
        exit(EXIT_FAILURE);
    }
 
    return fichier;
}

et dans la main je l apel comme ca:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
info = stat_fichier("info.txt");
 
printf("taille du fichier : %lu \n", info->st_size);
info est alloué au debut donc tous marche dans les deux cas, mais quelle difference il y a?

et une autre question a cette ligne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
fichier = (struct stat*)malloc(sizeof(struct stat));
ca marche tres bien sans le cast comme ca :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
fichier = malloc(sizeof(struct stat));
J ai lus des documents ou il est dit que c est obligatoire , et dans d autre que c' est un manque de lisibilité pour le code et que ca sert a rien ? qu est ce qu il en est vraiment ?

Merci a vous.