int main(int argc, char **argv) {
/* Déclaration du clock */
clock_t debut;
clock_t fin; 

char *Fichier_texte = (char *)malloc(40 * sizeof(char));
unsigned char * mon_text = (unsigned char *)malloc(5000000 * sizeof(unsigned char));
char *Fichier_mots = (char *)malloc(40 * sizeof(char));
unsigned char **mes_mots = (unsigned char **)malloc(100 * sizeof(unsigned char *));
int j, c;
long int i;

/* Utilisation des paramétres lors de l'exécution */
if (argc == 3){
if(strcpy(Fichier_texte, argv[1])==NULL) {printf("Impossible de trouver  le fichier contenant le texte\n");}
if(strcpy(Fichier_mots, argv[2])==NULL){printf("Impossible de trouver le fichier contenant les mots\n");}
} 
else{

/* L'utilisateur ne donne pas de paramétres  */
printf("Veuillez donner le nom du fichier qui contient le texte  :\n");
if (scanf("%s", Fichier_texte) == 0) {printf("Impossible de trouver le fichier contenant le texte\n"); return -1;}

printf("Entrez le nom du fichier contenant les mots a rechercher :\n");
if (scanf("%s", Fichier_mots) == 0) {printf("Impossible de trouver le fichier contenant les mots\n"); return -1;}
}
/* Ouverture des fichiers Fichier_texte et Fichier_mots en mode lecture */
FILE * texte_fichier = fopen(Fichier_texte, "r");
FILE * mots_fichier = fopen(Fichier_mots, "r");

/* Récuperer le texte dans une variable */
for (i = 0; i < 5000000; i++) {
mon_text[i] = fgetc(texte_fichier);
}

/* Récupération de la liste des mots */
for (i = 0; i < 100; i++) {
mes_mots[i] = (unsigned char *)malloc(60 * sizeof(unsigned char));
j = 0;
c = fgetc(mots_fichier);
while (c != '\n') {
mes_mots[i][j] = c;
c = fgetc(mots_fichier); j = j+1;}}

/* Debut de calcule du temps d'exécution */
debut = clock();
ahoCorasick(mes_mots, 100, mon_text, 5000000);
fin = clock();

/* Fin de calcule du temps d'exécution */
printf("**************************************************\n");
printf("Vous avez exécuté l'algorithme de recherche Aho-Corasick.\n");
printf("**************************************************\n");
printf("La structure utilisée pour representer le trie : 'Structure mixte'.\n");
printf("**************************************************\n");
printf("Le fichier qui contient le texte est : %s.\n",Fichier_texte );
printf("**************************************************\n");
printf("Le fichier qui contient l'ensemble des mots est : %s.\n",Fichier_mots );
printf("*******************      Temps    ****************\n");
printf("Le temp d'exécution de cette recherche est : %f seconde(s)...\n", (double) (fin - debut) / CLOCKS_PER_SEC);
printf("**************************************************\n");

/* Fermer les fichiers */
fclose(mots_fichier);
fclose(texte_fichier);

return 0;
}
void setTrie (int n) {
    trie.__init ();
    for (int i = 0; i < n; ++i) trie.insert (pat [i]);
    trie.computeFailure ();
    ahoCorasick ();
}