Prob. saisie de chaine de caractere C - XCODE

garsducalvados

Membre actif
20 Mai 2006
304
13
Clermont-Ferrand (63)
Bonjour,
j'ai un prog. en C que je développe à l'aide de XCODE.
Le hic c'est que j'ai bien déclaré ma variable :
char cle[200];

Et la saisie aussi :
printf("Quel est la chaîne que vous voulez saisir :\n");
fflush(stdin);
gets(cle);

Il se compile bien pas d'erreur j'execute donc.
Et il me met comme erreur :
warning: this program uses gets(), which is unsafe.


Pouvait m'aider car je n'arrive plus du tout à saisir et lorsque je met un scanf dés que j'appui sur entrer lorsque j'ai fini de saisir la chaîne il plante.

Merci

GarsDuCalvados.
 
Bonjour,
j'ai un prog. en C que je développe à l'aide de XCODE.
Le hic c'est que j'ai bien déclaré ma variable :
char cle[200];

Et la saisie aussi :
printf("Quel est la chaîne que vous voulez saisir :\n");
fflush(stdin);
gets(cle);

Il se compile bien pas d'erreur j'execute donc.
Et il me met comme erreur :
warning: this program uses gets(), which is unsafe.


Pouvait m'aider car je n'arrive plus du tout à saisir et lorsque je met un scanf dés que j'appui sur entrer lorsque j'ai fini de saisir la chaîne il plante.

Merci

GarsDuCalvados.


Un "Warning" n'est pas une erreur, juste une suspicion d'erreur possible.
Que veut dire "je met un scanf" ? Tu change ton code ?

Cordialement
 
Le scanf et le gets sont deux méthodes pour saisir une chaine de caractere.
Je test donc avec les dexu méthodes :
- je compile --> pas d'erreur
- j'éxecute et j'ai le méssage d'erreur suivant :
"warning: this program uses gets(), which is unsafe."

Au moment ou j'apuie sur entrer lorsque j'ai saisie la chaine de caractere.
 
Le scanf et le gets sont deux méthodes pour saisir une chaine de caractere.

Oui mais tu aurais du dire deux mauvaises méthodes. Ce pourquoi ta machine a la bonté inouïe de te le signaler par peur d'en subir les effets par la suite.

Une explication claire de pourquoi c'est mal et comment il faut faire :
http://c.developpez.com/faq/c/?page=clavier_ecran

++



PS : si tu tiens à cette mauvaise fonction, ce doit être une option du compilateur, et même peut être codé en brut dans le code de la fonction.. Celle ci n'étant disponible qu'à des fins de rétrocompatibilité.
 
From 'man gets':
Because of its lack of bounds checking, and the inability for the
calling program to reliably determine the length of the next incoming
line, the use of this function enables malicious users to arbitrarily
change a running program's functionality through a buffer overflow attack.

fgets() is a better choice. :)

If you compile with -Wall I think gcc will tell you to use fgets() right away.

fgets(myString, BYTES_TO_READ_IN, stdin);