Fonction C parcours de chaine

Jennif3r Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
 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)


 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:

3 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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.
3
Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
 
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.
0
Utilisateur anonyme
 
Bonsoir,

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
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Ce n'est pas close(), mais fclose().
0
Utilisateur anonyme
 
Ah oui, exact.
Désolé, mais j'ai écrit le code comme ça, je n'avais pas de compilateur sous la main quand j'ai posté...
0