Bonjour,
évidement si size est de type entier signé, il faut condamner un size-t de type entier non signé.Code:
1
2 char * fgets (char * s, int size, FILE * stream);
Faudra m'expliquer toutes ces vieilleries qui trainent au nom du règlement
Version imprimable
Bonjour,
évidement si size est de type entier signé, il faut condamner un size-t de type entier non signé.Code:
1
2 char * fgets (char * s, int size, FILE * stream);
Faudra m'expliquer toutes ces vieilleries qui trainent au nom du règlement
C'est pas très clair ce que tu dis et en plus ça a été déjà été débattu et expliqué. Tu veux dire quoi au juste ? Qu'il y a une incohérence ?
Oui, c'est possible. L'important est de le savoir et de prendre les précautions qui s'imposent, ou, comme je l'ai déjà dit, d'écrire une autre fonctions plus conforme à l'usage qu'on en fait. C'est tout à fait possible en C standard à coup de fgetc().
Salut,
ben oui, l'argument size devrait être de type size_t. Mais je suppose que l'on va rationaliser ce choix d'un type int par des explications complexes.Citation:
C'est pas très clair ce que tu dis et en plus ça a été déjà été débattu et expliqué. Tu veux dire quoi au juste ? Qu'il y a une incohérence ?
Enfin un int c'est toujours mieux qu'un short !
Il n'y a pas d'autre explication que l'histoire. Quand le C a été inventé en 1973, il n'existait pas de 'size_t'. Le choix de int était cohérent avec les pratiques de l'époque.
Quand le C a été normalisé en 1989 (ANSI) / 1990 (ISO), le type size_t (entier non signé capable de contenir la taille en bytes du plus grand objet adressable d'une implémentation donnée) a été ajouté à la norme. dans le même temps, la définition de l'opérateur sizeof a été modifiée pour retourner un size_t. Un certain nombre de fonctions ont été modifiées aussi comme strlen() ou malloc(). Malheureusement, et je reconnais que c'est inexplicable, fgets() a échappé à la modification.
C'est une incohérence de plus, c'est tout. Le langage C est loin d'être parfait, on le sait. C'est les cas de tous les langages issus du terrain. Tu peux toujours essayer le langage D si tu veux une évolution plus cohérente du C.
Bonjour,
Bah c'est pas grave, je ne vais pas changer de langage pour une petite incohérence. Cependant fread et fwrite ont bien intégré le size_t.Citation:
C'est une incohérence de plus, c'est tout. Le langage C est loin d'être parfait, on le sait. C'est les cas de tous les langages issus du terrain. Tu peux toujours essayer le langage D si tu veux une évolution plus cohérente du C.
Le langage D je ne connais pas. Est-ce vraiment utilisé ? Moins usine à gaz que le C++ avec sa template mania ?