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 :(
Version imprimable
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 :(
Salut
Je connais pas trop scanf, mais si c'est comme printf, ca doit être quelquechose comme
Code:scanf ("%20s", ptr);
Attention, le 20 inclus le 0 final...Citation:
Envoyé par Gruik
C'est bon à savoir 8-)
fgets() :mouarf:Citation:
Envoyé par troumad
Pour savoir comment utiliser scanf() de manière sécurisée, il y a un petit tutoriel ici :)
+1 :mouarf:Citation:
Envoyé par Emmanuel Delahaye
Je viens de tester :Ça marche ;)Code:
1
2
3
4
5
6
7
8
9 #include "stdio.h" void main() { char CHN[20]; scanf("%5s",CHN); printf("%s",CHN); }
fgets... Pourquoi pas, mais je ne maîtrise pas le FILE * stream...
Un exemple ?
Tant de réponse pendant mon test !
Merci ;)
je suggere
Code:
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 !
Citation:
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 str
Ca lit size - 1 caracteres afin de pouvoir mettre le '\0', donc pas besoin d'indiquer la taille -1 ;)Citation:
If 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...Citation:
Envoyé par Gruik
Code:
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:
1
2
3 fgets(CHN, sizeof CHN, stdin); clean(CHN, stdin);
T'es gentil avec tes petites questions, mais tu pourrais lire la doc...Citation:
Envoyé par troumad
http://dpobel.free.fr/man/html/affic...969/man/fgets/
RTFM comme dirait l'autre :mrgreen:
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:
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 stdin :( Pas 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 !
http://emmanuel-delahaye.developpez....tes.htm#saisieCitation:
Envoyé 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.Citation:
Envoyé par Emmanuel Delahaye
J'ai fini il y a dix ans (et plus même : je prends de l'âge :( ) 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.Citation:
Envoyé par Emmanuel Delahaye
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
Pas de problèmes :Citation:
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 ;)