J'ai l'impression qu'il y a ici confusion entre longueur de chaîne (caractère nul terminal non compris) et taille de buffer (caractère nul compris).
- strlen() retourne une longueur de chaîne.
- fgets() accepte une taille de buffer.
Personnellement, j'adopte une nomenclature stricte pour ça, en distinguant bien xxxLength de xxxSize. Le code devrait donc être corrigé en:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int main(void) { char buff[] = "babidy"; size_t length_buff = strlen(buff); (void)fgets(buff, length_buff + 1, stdin); return EXIT_SUCCESS; }
Voire, si on veut être aussi explicite que possible:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 int main(void) { char buff[] = "babidy"; size_t length_buff = strlen(buff); size_t size_buff = length_buff + 1; (void)fgets(buff, size_buff, stdin); return EXIT_SUCCESS; }
Partager