# Prob. saisie de chaine de caractere C - XCODE



## garsducalvados (13 Février 2007)

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.


----------



## Didier Guillion (13 Février 2007)

garsducalvados a dit:


> 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];
> ...




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


----------



## garsducalvados (13 Février 2007)

Le hic c'est que le warning se produit lors de l'execution du prog.


----------



## Didier Guillion (13 Février 2007)

garsducalvados a dit:


> Le hic c'est que le warning se produit lors de l'execution du prog.



Reponds a la moitié des questions et tu aura la moitié des réponses.

Cordialement


----------



## garsducalvados (13 Février 2007)

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.


----------



## Zeusviper (14 Février 2007)

garsducalvados a dit:


> 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é.


----------



## tatouille (15 Février 2007)

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);


----------

