You are not allowed to do this.
Langage C
Dernière réponse : dans Programmation
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
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
Autres pages sur : langage
Lassé par la pub ? Créez un compte
voici le code
non j'ai oublié de mettre gets et puts, et c'est possible que sa vienne de ça mon beug ?
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "adresse.h" double ajout(char nom, char prenom, char adresse, char ville, char codePostal, char telephone); double recherche(char nom, char prenom, char adresse, char ville, char codePostal, char telephone); int main() { long menu = 0; char prenom[100], nom[100], adresse[1000], ville[50], codePostal = 0, telephone = 20; FILE* fichier = NULL; printf("\t\t\tC A R N E T D ' A D R E S S E\n\n\n"); printf("1. Ajout d'adresse\n"); printf("2. Recherche d'adresse\n"); printf("3. Quitter\n"); printf("\n"); printf("Votre choix : "); scanf("%ld", &menu); switch (menu) { case 1 : fichier = fopen("adresse.txt", "w"); if (fichier =! NULL) { ajout(nom, prenom, adresse, ville, codePostal, telephone); } else { printf("Impossible d'ouvrir le fichier adresse.txt"); } break; case 2 : recherche(nom, prenom, adresse, ville, codePostal, telephone); break; case 3 : break; default : printf("\nMauvaise entree\n\n"); break; } return 0; }
double ajout(char nom, char prenom, char adresse, char ville, char codePostal, char telephone) { printf("\n"); printf("Nom : "); scanf("%s", nom); printf("Prénom : "); scanf("%s", prenom); printf("Adresse : "); scanf("%s", adresse); printf("Code postal : "); scanf("%ld", codePostal); printf("\n"); printf("Ville : "); scanf("%s", ville); printf("\n"); printf("Telephone : "); scanf("%ld", telephone); return 0; } double recherche(char nom, char prenom, char adresse, char ville, char codePostal, char telephone) { printf("Nom : "); scanf("%s", &nom); printf("\n"); printf("Prenom : "); scanf("%s", &prenom); printf("voici le résultat :\n"); printf("%s %s\n", nom, prenom); printf("%s\n", adresse); printf("%ld %s", codePostal, ville); printf("\n\n"); }
non j'ai oublié de mettre gets et puts, et c'est possible que sa vienne de ça mon beug ?
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
... 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
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
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);
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/man/manfr/man-ascii-0.9...
lis toutela page et tu comprendras mieu
lis toutela page et tu comprendras mieu
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-11181-1-c-realiser-des-saisies-securisees-grace-a-fgets.html)
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-11181-1-c-realiser-des-saisies-securisees-grace-a-fgets.html)
Citation :
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);
Au secours ce code est a bannir , risque de sécurité .
Il faut utiliser fgets pour les saisies clavier , point barre.
Lassé par la pub ? Créez un compte
- Contenus similaires :
- SolutionsCompiler le langage c sur l'invite de commande windows7
- SolutionsProbleme de débutant en langage c (pointeur)
- SolutionsLangage C: Saisir entrées à l'aide d'une boucle.
- SolutionsLangage C - le linker ne reconnait pas les sockets
- SolutionsRéunir deux programmes en Langage C
- SolutionsAvantage et inconvenient du langage php
- SolutionsQuel langage pour une Intelligence Artificielle (IA) ?
- ForumComment créer un jeu en 2D avec du langage html?
- ForumSite pour apprendre le Langage C
- Voir plus