2010-11-03 151 views
0

我的程序需要两个文件,并将单词排序为参数,并将混合文件执行成一个单独的文件,称为final_sorted.txt。程序成功运行并创建混合文件,甚至忽略重复的单词,但是编译器告诉我一些警告并没有被删除。警告从不兼容的指针类型传递'fopen'的参数1

[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 *’ 

这是我的代码,这需要这需要在命令行参数

#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); 
} 

我想有人帮助我发现了警告的原因,我怎么能解决,在此先感谢您的回答,对不起我的英语

回答

4

变化:

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

至:

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

或者更好的是:

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

这时会从主传递正确的类型(字符*),以mix_files,而这反过来也将当你调用fopen解决问题。

相关问题