franvergara66
franvergara66

Reputation: 10784

warning to pass argument 1 of ‘fopen’ from incompatible pointer type

My program takes two files with words sorted as parameter and performs the mixture into 1 single file called final_sorted.txt.the program runs successfully and creates the mixed file, even ignoring repeated words, but the compiler tells me some warnings that are not as removed.

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

this is my code, which takes which takes the command line parameter

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

I would like someone to help me discover the reason for the warning and how could I fix, thanks in advance for your answers, sorry for my English

Upvotes: 0

Views: 5534

Answers (1)

Paul R
Paul R

Reputation: 212959

Change:

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

to:

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

or better still:

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

You will then be passing the correct type (char *) from main to mix_files, and this in turn will also fix the problem when you call fopen.

Upvotes: 4

Related Questions