предупреждение о передаче аргумента 1 из «fopen» из несовместимого типа указателя - PullRequest
0 голосов
/ 03 ноября 2010

Моя программа берет два файла со словами, отсортированными в качестве параметра, и выполняет смешивание в один отдельный файл с именем 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 Ответ

4 голосов
/ 03 ноября 2010

Изменение:

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

до:

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

или еще лучше:

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

Затем вы передадите правильный тип (char *) из main в mix_files, и это, в свою очередь, также решит проблему при вызове fopen.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...