Tu dois utiliser la même taille des deux côté. Quelque chose comme:
constintN_ELEMENTS=20;...malloc(N_ELEMENTS*sizeof(*pointeur));fgets(pointeur,N_ELEMENTS*sizeof(*pointeur));/* Ou encore */constintBUFFER_SIZE=20*sizeof(char);// ou encore 20*sizeof(*pointeur);pointeur=malloc(BUFFER_SIZE);fgets(pointeur,BUFFERSIZE);
Ou une n'importe quelle autre combinaison tant que fgets reçoit la même valeur que malloc a reçu. Je préfère la première forme car à chaque utilisation on sait exactement de quoi il s'agit, dans la deuxième forme il reste l'ambiguité : est-ce que buffer_size est exprimé en taille d'octes (= char) ou en nombre d'objet avec le risque de te tromper comme tu l'as justement fait.
N'oublies pas aussi, comme on te l'a fait remarquer, de vérifier le retour de malloc, i.e. if (0 == pointeur) { return .../exit(1)} par example, et de fgets ! Extrait de la page "man fgets" : fgets() returns s on success, and NULL on error or when end of file occurs while no characters have been read (note: les pages man sont disponibles en traduction française aussi).
[^] # Re: Bonjour
Posté par benja . En réponse au message Traduction d'un programme C++ en C. Évalué à 2. Dernière modification le 30 décembre 2015 à 11:57.
Tu dois utiliser la même taille des deux côté. Quelque chose comme:
Ou une n'importe quelle autre combinaison tant que fgets reçoit la même valeur que malloc a reçu. Je préfère la première forme car à chaque utilisation on sait exactement de quoi il s'agit, dans la deuxième forme il reste l'ambiguité : est-ce que buffer_size est exprimé en taille d'octes (= char) ou en nombre d'objet avec le risque de te tromper comme tu l'as justement fait.
N'oublies pas aussi, comme on te l'a fait remarquer, de vérifier le retour de malloc, i.e. if (0 == pointeur) { return .../exit(1)} par example, et de fgets ! Extrait de la page "man fgets" : fgets() returns s on success, and NULL on error or when end of file occurs while no characters have been read (note: les pages man sont disponibles en traduction française aussi).