Fonction C parcours de chaine
Jennif3r
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonsoir!
Dans le cadre de mes études je dois réaliser un proxy en C, mais je bloque sur certaines fonctions dont la suivante!
Je dois en effet être capable de bloquer l'accès à un site, pour ce faire je crée un fichier txt (interdit.txt) et que je parcours une fois l'URL chopé (via une autre fonction)
Je galère réellement sur la fonction suivante, qui permet de parcourir un fichier (avec des URL à l'intérieur) et la comparer avec une autre chaîne (l'url que l'utilisateur veut accéder)
Je prends toute piste ou aide!
Dans le cadre de mes études je dois réaliser un proxy en C, mais je bloque sur certaines fonctions dont la suivante!
Je dois en effet être capable de bloquer l'accès à un site, pour ce faire je crée un fichier txt (interdit.txt) et que je parcours une fois l'URL chopé (via une autre fonction)
Je galère réellement sur la fonction suivante, qui permet de parcourir un fichier (avec des URL à l'intérieur) et la comparer avec une autre chaîne (l'url que l'utilisateur veut accéder)
int site_interdit( je pense que c'est une chaine url ) FILE* liste = NULL; char chaine[TAILLE_MAX] = "1000" int iterateur=0; fichier = fopen("interdit.txt", "r+"); if (fichier != NULL) { fgets(chaine, TAILLE_MAX, fichier); // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine" while(chaine[iterateur] != '\0') { // je m'en sors pas avec l'algo de parcours..., je dois ici parcourir une chaine, que je compare avec une autre chaine, c'est un peu le bordel! iterateur++; fclose(fichier); } //algo : // si url existe alors // le site est interdit sinon // code... return .. }
Je prends toute piste ou aide!
A voir également:
- Fonction C parcours de chaine
- Fonction si et - Guide
- Chaine tnt gratuite sur mobile - Guide
- Plus de chaine tv - Guide
- Chaine radio - Télécharger - Médias et Actualité
- Chaine musique bouygues - Accueil - Guide TV et vidéo
3 réponses
Bonjour,
char chaine[TAILLE_MAX] = "1000"
Pourquoi mettre 1000 dans ta chaîne ? Ne voulais-tu pas plutôt mettre 1000 dans TAILLE_MAX ?
Et tu as oublié un point virgule à la fin de ligne.
Ensuite, je ne comprends pas ton problème.
Il faut lire ligne par ligne ton fichier jusqu'à la fin.
Ce qui donne : while ( fgets(chaine, sizeof chaine, fichier) != NULL) {
Enfin, tu dois vérifier si chaine est égal à url (utiliser : strcmp()) ou mieux vérifier si chaine est contenu dans url (utiliser strstr()).
Voilà pour les pistes, je te laisse creuser.
N'hésite pas, si besoin.
char chaine[TAILLE_MAX] = "1000"
Pourquoi mettre 1000 dans ta chaîne ? Ne voulais-tu pas plutôt mettre 1000 dans TAILLE_MAX ?
Et tu as oublié un point virgule à la fin de ligne.
Ensuite, je ne comprends pas ton problème.
Il faut lire ligne par ligne ton fichier jusqu'à la fin.
Ce qui donne : while ( fgets(chaine, sizeof chaine, fichier) != NULL) {
Enfin, tu dois vérifier si chaine est égal à url (utiliser : strcmp()) ou mieux vérifier si chaine est contenu dans url (utiliser strstr()).
Voilà pour les pistes, je te laisse creuser.
N'hésite pas, si besoin.
Bonjour,
En chargeant les chaines du fichier en mémoire soit dans une liste ou un tableau taille fixe ou variable pour les contenir et effectuer la vérification dessus : plus simple et rapide.
En chargeant les chaines du fichier en mémoire soit dans une liste ou un tableau taille fixe ou variable pour les contenir et effectuer la vérification dessus : plus simple et rapide.
Bonsoir,
Comme l'a dit fiddy, le mieux est d'utiliser fgets dans une boucle.
La fonction aurait donc un peu cette forme :
Elle renvoie 1 si le site est interdi, 0 sinon
Comme l'a dit fiddy, le mieux est d'utiliser fgets dans une boucle.
La fonction aurait donc un peu cette forme :
int site_interdit(char *site) { FILE* f = NULL; char chaine[TAILLE_MAX]; int iterateur = 0; f = fopen("interdit.txt", "r+"); if (f != NULL) { // On parcours le fichier jusqu'à la fin, on renvoie 1 si le site est dedans (donc interdit) while (fgets(chaine, TAILLE_MAX, f) != NULL) { printf("fgets : %s\n", chaine); if (strstr(chaine,site) != NULL) { // ou !strcmp(chaine,site) close(f); return 1; } } } else { printf("Erreur lors de l'ouverture du fichier\n"); } close(f); return 0; }
Elle renvoie 1 si le site est interdi, 0 sinon