警告从不兼容的指针类型传递'fopen'的参数1

时间:2010-11-03 09:47:06

标签: c file warnings

我的程序采用两个文件,其中单词作为参数排序,并将混合物分成1个单独的文件,名为final_sorted.txt。程序运行成功并创建混合文件,甚至忽略重复的单词,但编译器告诉我一些警告没有被删除。

equipo01@equipo01-desktop:~/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);
}

我希望有人帮我发现警告的原因以及如何修复,提前感谢您的答案,对不起我的英语

1 个答案:

答案 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){

然后,您将从main传递正确的类型(char *)到mix_files,这反过来也会在您调用fopen时解决问题。