Non, désolé, non, si char buff[]="babidy" alors strlen(buff) ne peut pas valoir zéro. J'ai beau le tourner dans tous les contextes du monde, je ne vois pas comment strlen(buff) peut valoir 0. Ou alors... ou alors c'est si tu écris plus tard
char buff[]=""? Ce serait ça ton "garde-fou"??? Alors là les bras m'en tombent. Tu es vraiment en train de dire à la communauté des devs du C "hey les gars, si vous programmez comme des débiles j'ai la solution"??? Ou alors c'est pour math25 qui débute que tu as pondu cette... bouse? Pour lui dire "hey mon gars, tu débutes tu risques de faire des erreurs mais t'inquiète pas, voici un test qui va te protéger"? Et que se passera-t-il s'il suit tes conseils et qu'il écrit (comme dans ton post précédent)
char buff[50]="babidy"??? 50 caractères offerts mais seulement 6 à pouvoir être saisis!!! Sans déconner t'es un vrai danger public du C toi!!!
Désolé mais même comme ça, ton code sert à que dalle. Parce que même si on ne teste pas size_buff == 0, le fgets() suivant, lui, empêchera la saisie, pour peu qu'on l'écrive correctement. Car c'est
fgets(buff, size_buff+1, stdin) qu'il faut écrire (hé oui, fgets() enlève systématiquement 1 à la taille qu'on lui donne pour pouvoir y stocker le '\0').
Donc si on réécrit ton code ainsi...
1 2 3 4 5 6 7 8
| int main(void ){
char buff[] = "babidy";
size_t size_buff = strlen(buff);
(void)fgets(buff, size_buff + 1, stdin);
return EXIT_SUCCESS;
} |
Partager