> Tous les forumsAutres langages

 Erreur de compilationSujet résolu
Statut du sujet : RESOLU Imprimer
 Premium
  Posté le 30/05/2006 @ 13:56  
 Petit astucien

205 Messages
Salut, à la compilation d'un programme, j'ai cette erreur : [code] /tmp/ccycgID8.o: dans la fonction « parsing »: parsing.c:(.text+0x22a): référence indéfinie vers « correctIP » collect2: ld a retourné 1 code d'état d'exécution[/code] Je ne comprends pas très bien ou est le problème car dans le fichier parsing.c, j'ai bien mis le .h qui contient la fonction correctIP
 Afficher le profil de PremiumEnvoyer un message privé à Premium
 
 
Publicité
 breizhbugs  Posté le 30/05/2006 à 14:29  
Astucien

3001 Messages
[hello] Code source?
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
 Premium  Posté le 30/05/2006 à 15:05  
Petit astucien

205 Messages
Salut, voici les différents fichiers En même temps, si tu pouvais également me dire si des améliorations sont à effectuer sur le code, n'hésite pas. Merci d'avance parsing.c [code] #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #include "verifIP.h" #define F "fichier" void purge(FILE *fp) { int c; while ((c = fgetc(fp)) != '\ //ici c'est \n ' && c != EOF) { } } void clean (char *s, FILE *fp) { char *p = strchr (s, '\ //ici c'est \n '); if (p != NULL) { *p = 0; } else { purge (fp); } } char **parsing(FILE *fp) { char **tab; int nb = 0 ,size = 5; tab = malloc (size * sizeof * tab); if(tab == NULL) { perror("erreur allocation\n"); exit(1); } if (fp != NULL) { char line[BUFSIZ]; while(fgets(line, sizeof line, fp) != NULL) { clean(line, fp); char *p = strtok(line," "); if (p != NULL) { p = strtok(NULL," "); if (p != NULL) { if(nb == size) { size += 16; tab = realloc(tab, size * sizeof *tab); if (tab == NULL) { perror("erreur allocation\n"); free(tab); tab = NULL; return tab; } } int ip[4]; int n = sscanf(p,"%d.%d.%d.%d",ip,ip+1,ip+2,ip+3); if(n == 4) { tab[nb] = malloc((strlen(p)+1) * sizeof * tab[nb]); if (tab[nb] == NULL) { perror("erreur allocation\n"); free(tab); tab = NULL; return tab; } if(!correctIP(p)) { strcpy(tab[nb],p); nb++; } } } else { printf ("format error\n"); break; } } else { printf ("format error\n"); break; } } fclose (fp), fp = NULL; tab[nb] = NULL; } else { perror (F); } assert (fp == NULL); return tab; } [/code] parsing.h [code] #ifndef H_PARSING #define H_PARSING #include <stdio.h> void purge(FILE *fp); void clean (char *s, FILE *fp); char **parsing(FILE *fp); #endif [/code] verifIP.c [code] #include <stdio.h> #include <stdlib.h> // Si une IP est nulle int ip_null(int ip[4]) { size_t i; for (i = 0; i < 4; i++) { if (ip[i] == 0) { return 0; } } return 1; } // Si une IP égale une autre IP int ip_equal(int ip1[4], int ip2[4]) { size_t i; for (i = 0; i < 4; i++) { if (ip1[i] == ip2[i]) { return 0; } } return 1; } // Si une IP inf une autre IP int ip_inf(int ip1[4], int ip2[4]) { size_t i; for (i = 0; i < 4; i++) { if (ip1[i] > ip2[i]) { return 0; } } return 1; } // Si une IP sup une autre IP int ip_sup(int ip1[4], int ip2[4]) { size_t i; for (i = 0; i < 4; i++) { if (ip1[i] < ip2[i]) { return 0; } } return 1; } //Verifie si une IP est correcte int Verife(int ip[4]) { typedef struct { int deb[4]; int fin[4]; }t_plageIP; static t_plageIP tabPlage[]= { {{10, 0, 0, 0}, {10, 255, 255, 255}}, {{172, 16, 0, 0}, {172, 31, 255, 255}}, {{192, 168, 0, 0}, {192, 168, 255, 255}}, {{224, 0, 0, 0}, {239, 255, 255, 255}}, {{240, 0, 0, 0}, {255, 255, 255, 255}}, {{0, 0, 0, 0}, {0, 0, 0, 0}} }; t_plageIP *ptPlage; // Balayage des plages for (ptPlage=tabPlage; ip_null(ptPlage->deb) != 0; ptPlage++) { if (ip_sup(ip, ptPlage->deb) && ip_inf(ip, ptPlage->fin)) // IP appartient plage interdite return 1; } // IP appartient pas plage interdite return 0; } //Verifie si la chaine est une IP correcte int correctIP(char *chaine){ int *ip = malloc (sizeof * ip * 4); if(ip == NULL) { perror("erreur allocation\n"); return 1; } int n = sscanf(chaine, "%d.%d.%d.%d", ip, ip + 1, ip + 2, ip + 3); if(n != 4) { printf("erreur\n"); free(ip); return 1; } if(!Verife(ip)) { free(ip); return 1; } return 0; } [/code] verifIP.h [code] #ifndef H_VERIFIP #define H_VERIFIP // Si une IP est nulle int ip_null(int ip[4]); // Si une IP égale une autre IP int ip_equal(int ip1[4], int ip2[4]); // Si une IP inf une autre IP int ip_inf(int ip1[4], int ip2[4]); // Si une IP sup une autre IP int ip_sup(int ip1[4], int ip2[4]); //Verifie si une IP est correcte int Verife(int ip[4]); //Verifie si la chaine est une IP correcte int correctIP(char *chaine); #endif [/code] main.c [code] #include <stdio.h> #include <stdlib.h> #include "parsing.h" int main() { FILE *file = fopen("fichier","r"); char **tab; char **pt; tab = parsing(file); if(tab == NULL) { perror("erreur\n"); exit(1); } for(pt = tab; *pt != NULL; pt++) printf("%s\n",*pt); free(tab); tab = NULL; return 0; } [/code] un fichier pour tester [code] 1 122.145.4.3 15.341 ms * 6.454 ms 2 * * * 3 143.213.43.45 14.447 ms 15.199 ms 40.861 ms 4 254.65.34.176 18.966 ms 15.861 ms 16.480 ms 5 176.56.65.134 16.612 ms * 19.449 ms 6 245.45.2.15 20.819 ms 13.349 ms * 7 143.154.154.56 17.262 ms 22.436 ms 18.365 ms 8 * * * 9 * * * 10 176.91.154.178 15.788 ms 18.069 ms 19.986 ms [/code]

Modifié par Premium le 30/05/2006 15:09
Afficher le profil de PremiumEnvoyer un message privé à Premium
 Revenir en haut de la page
 breizhbugs  Posté le 30/05/2006 à 16:34  
Astucien

3001 Messages
Il manque le makefile.
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
 Premium  Posté le 30/05/2006 à 16:40  
Petit astucien

205 Messages
breizhbugs a écrit :
Il manque le makefile.
Je n'ai pas fait de Makefile. En faite, c'était un problème tout simple, je n'avais pas compilé en ajoutant les fichiers verifIP.c et verifIP.h [idee] Le problème est résolu une fois que j'ajoute ces 2 fichiers [bigsmile]
Afficher le profil de PremiumEnvoyer un message privé à Premium
 Revenir en haut de la page
 breizhbugs  Posté le 30/05/2006 à 17:07  
Astucien

3001 Messages
Premium a écrit : En faite, c'était un problème tout simple, je n'avais pas compilé en ajoutant les fichiers verifIP.c et verifIP.h [idee]
C'est ce que je voulais voir dans le makefile. Fais toi un makefile, c'est plus "classe" (et pis si les profs veulent compiler ton programme, ils ne chercheront pas autre chose!)
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte



Les sujets pertinents liés
probléme compilation devc++
lire du son (java)
Problème avec des structures en C
[C] Erreur de compilation
[JAVA] Test de XQuery SAXON - Pb de Compilation
langage C: recherche dans un fichier
prob java [resolu]
Err VB : la classe ne gère pas automation err 430
erreur de compilation
erreur de compilation
comment supprimer un projet
.NET:Problème de connexion avec la base de donnés
macro sous excel
hibernate erreur:ORA-01000: maximum open cursors e
VB4 to VB6 ??
Canon
de l'aide en c++
 
Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !



 > Tous les forumsAutres langages

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page