2010-11-03 17 views
0

Mon programme prend deux fichiers avec des mots triés en tant que paramètre et effectue le mélange en 1 seul fichier appelé final_sorted.txt.le programme fonctionne avec succès et crée le fichier mixte, même en ignorant les mots répétés, mais le compilateur me dit quelques avertissements qui ne sont pas aussi enlevés.avertissement de passer l'argument 1 de 'fopen' du type de pointeur incompatible

[email protected]:~/Escritorio/mezclar (2)$ gcc meclapro.c -o mixmeclapro.c: In function ‘mix_files’: 
meclapro.c:10: warning: passing argument 1 of ‘fopen’ from incompatible pointer type 
/usr/include/stdio.h:249: note: expected ‘const char * __restrict__’ but argument is of type ‘char **’ 
meclapro.c:11: warning: passing argument 1 of ‘fopen’ from incompatible pointer type 
/usr/include/stdio.h:249: note: expected ‘const char * __restrict__’ but argument is of type ‘char **’ 
meclapro.c: In function ‘main’: 
meclapro.c:69: warning: passing argument 1 of ‘mix_files’ from incompatible pointer type 
meclapro.c:6: note: expected ‘char **’ but argument is of type ‘char *’ 
meclapro.c:69: warning: passing argument 2 of ‘mix_files’ from incompatible pointer type 
meclapro.c:6: note: expected ‘char **’ but argument is of type ‘char *’ 

ceci est mon code, qui prend, qui prend le paramètre de ligne de commande

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

void mix_files(char **file1, char **file2){ 

    FILE *a1, *a2, *output; 
    char aux1 [10000],aux2 [10000]; 
    a1 = fopen(file1, "r"); 
    a2 = fopen(file2, "r"); 
    ouput = fopen ("final.txt", "w+"); 

    // read the first line of each file: 
    fscanf(a1,"%s",aux1); 
    fscanf(a2,"%s",aux2); 
    // loop, while !feof for both file 
    while(!feof(a1) && !feof(a2)) { 
     // Select the line to add 
     if(strcasecmp(aux1,aux2) < 0){ 
      // add the line 
      fprintf(output,"%s\n",aux2); 
      //read the next line from aux2 
      fscanf(a2,"%s",aux2); 
     } 

     else if(strcasecmp(aux1,aux2)>0){ 
      fprintf(salida,"%s\n",aux1); 
      fscanf(a1,"%s",aux1); 
     } 

     if (strcasecmp(aux1,aux2)==0){ 
      //printf("repetidas\n"); 
      fprintf(salida,"%s\n",aux1); 
      fscanf(a1,"%s",aux1); 
      fscanf(a2,"%s",aux2); 
     } 
    } 

    if(!feof(a1)){ 
     while(!feof(a1)) { 
      fscanf(a1,"%s",aux1); 
      fprintf(salida,"%s\n",aux1); 
     } 
    } 
    if(!feof(a2)){ 
     while(!feof(a2)) { 
      fscanf(a2,"%s",aux2); 
      fprintf(salida,"%s\n",aux2); 
     } 
    } 

} 

int main(int argc, char *argv[]){ 

    mix_files(argv[2], argv[1]); 

    return(0); 
} 

Je voudrais que quelqu'un me aider à découvrir la raison de l'avertissement et comment pourrais-je fixer, grâce à l'avance vos réponses, désolé pour mon anglais

Répondre

4

Change:

void mix_files(char **file1, char **file2){ 

à:

void mix_files(char *file1, char *file2){ 

ou mieux encore:

void mix_files(const char *file1, const char *file2){ 

Vous serez alors passer le bon type (char *) du principal à mix_files, et cela à son tour aussi résoudre le problème lorsque vous appelez fopen.