Série 4 Entrées/Sorties

Série 4 Entrées/Sorties

by Isis Beloslava Daudé -
Number of replies: 3

Bonjour,

J'ai une question concernant la série 4 portant sur les entrées/sorties.

J'ai voulu implémenter la fonction demander_fichier() pour demander à l'utilisateur le nom du fichier depuis lequel nous devrions lire les données.

J'ai utilisé un scanf pour la lecture du nom tout en vidant le tampon d'entrée. Lorsque je compile avec gcc et que je rentre un nom de fichier, existant et accessible, je reçois ce message:

***stack smashing detected ***: <unknown> terminated

Abandon (core dumped)


Je pense que cette erreur est reliée à mon utilisation de scanf mais je ne sais pas comment la résoudre, pourriez vous m'aider?


Merci beaucoup et bonne journée!

Isis

In reply to Isis Beloslava Daudé

Re: Série 4 Entrées/Sorties

by Lúcás Críostóir Meier -

Ca vient surement de ce qu'on appelle un "buffer overflow". Tu as un string sur le stack, avec une certaine capacité, et scanf essaie de le remplir avec plus de caractères qu'il ne peut contenir. Ce qui se passe après c'est que les caractères vont être écrites dans la mémoire qui suit ce string, donc dans le stack. Ton système opératoir n'a pas l'air d'apprécier.

Je crois que les transparents du cours mentionnent même que c'est mieux d'utiliser fgets pour lire un string que scanf, puisque fgets permet de contrôler la taille de l'input qu'on recoit, et donc d'eviter ce buffer overflow.

In reply to Isis Beloslava Daudé

Re: Série 4 Entrées/Sorties

by Deleted user -

Bonjour,

Difficile de dire exactement où est le problème sans le code sous les yeux. Vu qu'il s'agit d'un exercice de la série, tu peux soit poster l'extrait de code où tu utilises scanf soit joindre le code source.

In reply to Isis Beloslava Daudé

Re: Série 4 Entrées/Sorties

by Isis Beloslava Daudé -

Merci pour vos réponses, j'ai pu trouver mon erreur!

En effet, le tableau de char qui permettait de stocker le nom du fichier à ouvrir ne contenait pas assez de place pour stocker cette chaîne de caractères, je ne pouvais donc pas écrire dans ce tableau lors du scanf, créant une erreur.


Merci encore et bonne journée!

Isis