Bonsoir
On m'avait indiqué une fonction pour évité de débordement de scanf("%s",ch) en indiquant le nombre de caractères maximal pour la chaîne de caractères. Quelle est-elle ? Je n'arrive plus à la trouver![]()
Bonsoir
On m'avait indiqué une fonction pour évité de débordement de scanf("%s",ch) en indiquant le nombre de caractères maximal pour la chaîne de caractères. Quelle est-elle ? Je n'arrive plus à la trouver![]()
Modérateur Mageia/Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels : xrandr, algorigramme et C, xml et gtk...
Salut
Je connais pas trop scanf, mais si c'est comme printf, ca doit être quelquechose comme
Code : Sélectionner tout - Visualiser dans une fenêtre à part scanf ("%20s", ptr);
Attention, le 20 inclus le 0 final...Envoyé par Gruik
Pour savoir comment utiliser scanf() de manière sécurisée, il y a un petit tutoriel ici![]()
Je viens de tester :Ça marche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #include "stdio.h" void main() { char CHN[20]; scanf("%5s",CHN); printf("%s",CHN); }![]()
Modérateur Mageia/Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels : xrandr, algorigramme et C, xml et gtk...
fgets... Pourquoi pas, mais je ne maîtrise pas le FILE * stream...
Un exemple ?
Tant de réponse pendant mon test !
Merci![]()
Modérateur Mageia/Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels : xrandr, algorigramme et C, xml et gtk...
je suggere
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include "stdio.h" int main() { char CHN[20]; fgets(CHN, sizeof CHN, stdin); CHN[strlen(CHN) -1] = '\0'; /* Mais Emdel va te sortir sa super fonction clean() */ fputs (CHN, stdout); return 0; }
fgets(b, sizeof b, stdin); ou fgets(b, sizeof b -1, stdin);
nb : j'aurais mis des () à sizeof ? Ça me rassurait quant à la priorité des opérations !
Modérateur Mageia/Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels : xrandr, algorigramme et C, xml et gtk...
The fgets() function reads at most one less than the number of characters specified by size from the given stream and stores them in the string strCa lit size - 1 caracteres afin de pouvoir mettre le '\0', donc pas besoin d'indiquer la taille -1If any characters are read and there is no error, a `\0' character is appended to end the string![]()
Oui, car le '\n' n'est pas forcément là. Il faut donc une action plus, disons, adaptative...Envoyé par Gruik
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 static void clean (char *s, FILE *fp) { /* search ... */ char *p = strchr (s, '\n'); /* <string.h> */ if (p != NULL) { /* ... and kill */ *p = 0; } else { /* purge */ int c; while ((c = fgetc(fp)) != '\n' && c != EOF) { } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 fgets(CHN, sizeof CHN, stdin); clean(CHN, stdin);
T'es gentil avec tes petites questions, mais tu pourrais lire la doc...Envoyé par troumad
http://dpobel.free.fr/man/html/affic...969/man/fgets/
RTFM comme dirait l'autre![]()
Mais faut avouer que la construction de la phrase anglaise est pas tres simple si on connait pas bien l'anglais
"The fgets() function reads at most one less than the number of characters specified by size"
"at most one less than" C'est pas evident je trouve ^^
1) Je n'avais pas regardé la doc...
2) Je suis plutôt anglophobe... Pas été assez sérieux de mon jeune temps
Toutes les fautes sont de mon côté ! Mais j'avoue que man fgets donneCette fois, je suis complètement dans le panneau ! Mais le coup du moins un, j'avoue que je n'avais pas du tout pensé que ça puisse exister ! Pour le man, je me suis arrété à FILE * stream qui est une notion que je ne connais pas car je n'en ai jamais eu besoin !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 fgets() lit au plus size - 1 caractÃres depuis stream et les place dans le buffer pointé par s. La lecture s'arrête aprÃs EOF ou un retour-chariot. Si un retour-chariot (newline) est lu, il est placé dans le buffer. Un caractÃre nul '\0' est placé à la fin de la ligne.
Par contre, je ne comprends pas le purge du programme d'Emmanuel Delahaye! Surement parce que je n'ai pas étudié le stdinPas besoin de répondre, mais je pense que plus de comentaires dans le code serait agréable.
Pourquoi virer tous les caractères présents dans ce que j'appellerais par ignorance un tampon ! De ce côté, j'ai des choses à apprendre, mais malhereusement, jen'ai pas le temps !
Modérateur Mageia/Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels : xrandr, algorigramme et C, xml et gtk...
http://emmanuel-delahaye.developpez....tes.htm#saisieEnvoyé par troumad
http://emmanuel-delahaye.developpez....s.htm#fichiers
La purge est le choix le plus simple et le plus radical. Il y en a d'autres.
Je te donnerais bien des exemples de code, mais tu risques d'être encore plus largué...
Je prends note pour mettre dans ma préparation de cours, ce que j'ai déjà fait avec la remarque d'Anomaly.Envoyé par Emmanuel Delahaye
J'ai fini il y a dix ans (et plus même : je prends de l'âgeEnvoyé par Emmanuel Delahaye
) 3 ans de programmation intensive en C. Mon problème n'était absolument pas les I/O, mais la programmation de machines expérimentales avec X processeurs. Maintenant, je me suis proposé pour encadrer à partir de septembre un cours d'initialisation de C dans lequel je mettrais en remarque ce que j'apprends ici car c'est en dessus du niveau demandé, mais je me dois de le mettre.
nb : je viens de mettre en ligne un programme (code source) que j'avais fait à cette époque sous Borland C qui tourne sous DOS avec gestion de la mémoire haute du PC et affichage couleur : http://troumad.info/C/courbes.zip
Modérateur Mageia/Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels : xrandr, algorigramme et C, xml et gtk...
Pas de problèmes :Envoyé par troumad
http://emmanuel-delahaye.developpez.com/clib.htm
Module IO
Bon... J'ai une mise à niveau à faire ! Même apprendre de nouvelles choses : je suis 100% autodidacte, mes profs ne connaissaient que le Pascal.
je reconnais le principe des "petits programmes/grosses briques" que j'avais à l'époque où j'étais jeune. Ça accellérait pas mal la conception de nouveaux programmes !
Merci![]()
Modérateur Mageia/Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels : xrandr, algorigramme et C, xml et gtk...
Partager