where is the error in this C code , and how to get rid of the warnings?

Posted by mekasperasky on Stack Overflow See other posts from Stack Overflow or by mekasperasky
Published on 2010-05-27T11:14:44Z Indexed on 2010/05/27 11:31 UTC
Read the original article Hit count: 219

Filed under:
#include<stdio.h>
#include<string.h>
//This program is a sorting application that reads a sequence of numbers from a file and prints them on the screen . The reading from the file here , is a call back function . 

typedef int (*CompFunc)(const char* , const char* );
typedef int (*ReadCheck)(char nullcheck);
char array[100];
//Let this fucntion be done in the library itself . It doesnt care as to where the compare function and how is it implemented . Meaning suppose the function wants to do sort in ascending order or in descending order then the changes have to be done by the client code in the "COMPARE" function who will be implementing the lib code . 
void ReadFile(FILE *fp,ReadCheck rc)
{
    char a;
    char d[100];
    int count = 0,count1=0;
    a=fgetc(fp);
    while(1 != (*rc)(a)) 
    {   if(a=='\0')
        {
        strcpy(array[count],d);
        count=count+1;
        }
        else
        {

        d[count1]=a;
        count1=count1+1;

        }
    }   

}
void Bubblesort(int* array , int size , int elem_size , CompFunc cf)
{   int i,j;
    int *temp;
    for( i=0;i < size ;i++)
    {
        for ( j=0;j < size -1 ; j++)
        {
            // make the callback to the comparision function
            if(1 == (*cf)(array+j*elem_size,array+ (j+1)*elem_size))
                {
                    //interchanging of elements 
                    temp =  malloc(sizeof(int *) * elem_size);
                    memcpy(temp , array+j*elem_size,elem_size);
                    memcpy(array+j*elem_size,array+(j+1)*elem_size,elem_size);
                    memcpy(array + (j+1)*elem_size , temp , elem_size);
                    free(temp);
                }
        }
    }
}



//Let these functions be done at the client side 

int Compare(const char* el1 , const char* el2)
    {
        int element1 = *(int*)el1;
        int element2 = *(int*)el2;

        if(element1 < element2 )
            return -1;
        if(element1 > element2)
            return 1 ;
        return 0;
    }

int ReadChecked(char nullcheck)
    {
        if (nullcheck=='\n')
            return 1;
        else 
            return 0;
    }
int main()
{
    FILE fp1;
    int k;
    fp1=fopen("readdata.txt","r");
    Readfile(fp1,&ReadChecked);
    Bubblesort((char*)array,5,sizeof(array[0]),&Compare);
    printf("after sorting \n");
    for (k=0;k<5;k++)
    printf("%d",array[k]);

return 0;
}

The error i get is

fsc1.c: In function ‘ReadFile’:
fsc1.c:19: warning: passing argument 1 of ‘strcpy’ makes pointer from integer without a cast

    fsc1.c: In function ‘Bubblesort’:
    fsc1.c:40: warning: passing argument 1 of ‘cf’ from incompatible pointer type
    fsc1.c:40: warning: passing argument 2 of ‘cf’ from incompatible pointer type
    fsc1.c:43: warning: incompatible implicit declaration of built-in function ‘malloc’
    fsc1.c:47: warning: incompatible implicit declaration of built-in function ‘free’
    fsc1.c: In function ‘main’:
    fsc1.c:80: error: incompatible types in assignment
    fsc1.c:82: warning: passing argument 1 of ‘Bubblesort’ from incompatible pointer type

© Stack Overflow or respective owner

Related posts about c