2010-11-03 158 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解決問題。

相關問題