Langage C
Forum Programmation : Langage C
Bonjour,
Depuis plusieurs mois je fais du C et la j'ai voulu réaliser un carnet d'adresse en C console.
Mais j'ai un probléme, c'est quand je compile le programme et que je le test, tout marche comme je veux sauf arrivée au niveau de "l'adresse", dés que je met un espace dans ce que je rentre, aprés sa beug tout le reste. J'ai éssaié avec plusieur compilateur t'elle que code::block, Dev-C++, Visual basic C++, et j'ai toujours le même probléme, est ce que quelqu'un serait pourquoi ça me fait sa ?
Merci
Bonjour,
Est-ce qu'on pourrait voir le code source s'il vous plait ?
t'as bien utilisé des gets et puts pour récupérer et afficher les adresses ?
voici le code
Code :
|
Code :
|
non j'ai oublié de mettre gets et puts, et c'est possible que sa vienne de ça mon beug ?
Répondre à ghost_blue
franchement j'ai pas lu ... mais j'ai vu que tu utilisais pas mal de scanf ... essaye de bannir les scanf qui presentent une faille ... officielle sous linux car si tu programmes sous linux : il te mettera une erreur à chaque utilisation de scanf
... windows préfère continuer à les utiliser (boulets ? qui a dit boulets ?)
donc essaye déjà de les remplacer et tu verras si ca fait encore l'erreur revient nous le dire ![]()
PS : je tiens cette info d'un de mes profs en prog + j'avais lu le rapport officiel mais je le retrouve plus ... même avec google lol
Message édité par gryphus71 le 27-05-2007 à 21:07:59
ok, mais je les remplaces par quoi ?
Répondre à ghost_blue
ben tu utilises gets !
ouai mais c'est pour écrire dans un fichier donc sa risque de déconner non ?
Répondre à ghost_blue
heuuu je crois qu'on s'est pas compris ^^ :
le scanf ... tu l'utilise pour récupérer une information ! tu n'utilises pas un scanf pour écrire dans un fichier ! tu utilises ... je sais plus mais c'est une autre fonction !
ben là tu utilise gets pour demander l'info à la personne au clavier, puis une fois que tu auras récupéré cette info (avec gets) tu l'écris dans le fichier avec l'autre fonction
si je ne me trompe pas, pour récupérer une donnée tu as plusieurs choix, entre autre :
char DonneeVoulue[30];
/*ca c'est pour récupérer une chaine de longueur inconnue :*/
gets(DonneeVoulue);
/*ca c'est pour récupérer une chaine de longueur définie (ici 12 caractères max : 13-1=12, le -1 est pour le retour chariot '\n') :*/
fgets(DonneeVoulue, 13, stdin);
vas lire ca : http://www.linux-kheops.com/doc/ma [...] 3.txt.html
lis toutela page et tu comprendras mieu
quand je disais, c'est pour écrire dans un fichier, je parlais de gets, merci pour le lien je l'irai tout à l'heure
Répondre à ghost_blue
gets c'est pas pour écrire dans un fichier !
tu dois confondre avec :
fputs : ca c'est pour écrire dans un fichier (enfin je crois me souvenir lol)
ou
fgets : qui est utilisé pour récupérer une donnée d'un fichier
le proto de ta fonction ajout n'est pas bon, tes paramètres sont de type tableau de char :
double ajout(char* nom, char* prenom, char* adresse, char* ville, char* codePostal, char* telephone);
scanf et gets sont deux fonctions aussi dangereuses l'une que l'autre, puisqu'on ne passe pas la taille maximale du buffer (donc buffer overflow possible).
Tu peux utiliser fgets. (http://www.siteduzero.com/tuto-3-1 [...] fgets.html)
Message édité par chrisz le 28-05-2007 à 11:04:28
| Citation :
|
Au secours ce code est a bannir , risque de sécurité .
Il faut utiliser fgets pour les saisies clavier , point barre.
Répondre à defaultuser
Ô_ô
si vous faites du dynamique : vous ne pourvez pas connaitre la taille du texte saisi à l'avance !
c'est juste qu'il faut faire attention d'utiliser la fonction la + appropriée !
Il y a 2052 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
