J'ai le segment de code suivant dans un de mes programmes:Quelle taille devrait-on utiliser pour les fgets?
char input[LINE_SIZE + 1]; /* +1 for '\0'. */
while(fgets(input, LINE_SIZE, stdin) != NULL)
{
/* Do stuff. */
}
Dans une question qui a depuis été supprimé, il me l'a fait remarquer que mon code pourrait être buggy. Je déclare les chaînes avec la notation "+ 1" pour rendre le code plus informatif et lisible (en veillant à ne pas oublier de prendre en compte le terminateur NULL, car cela était un problème). Cependant, on m'a dit que le fgets
devrait utiliser exactement la même taille pour son deuxième paramètre. J'ai vu d'autres articles ici qui font les mêmes pratiques que moi.
Je ne suis pas certain. Est-ce une mauvaise pratique de ne pas inclure le "+ 1" dans le paramètre fgets?
Le plus/moins 1 n'est pas nécessaire. Suggérer 'fgets (input, sizeof input, stdin)' quand 'input' est un tableau. – chux
Pourquoi transmettre une valeur que vous * connaissez * est désactivée de 1? Cela dit, il est de 1 dans la direction sûre, donc pose peu de risque réel. –
pour 'char input [LINE_SIZE + 1];', 'LINE_SIZE' est le nombre maximum de caractères (sans compter le terminateur), et' LINE_SIZE + 1' est la taille réelle du tableau. Pour 'fgets()', vous passez la taille du tableau ... il lira au plus un caractère de moins que cela, et ajoutera le terminateur. – Dmitri