Home > front end >  GCC (C) - error: 'x' redeclared as different kind of symbol
GCC (C) - error: 'x' redeclared as different kind of symbol

Time:11-16

I'm writing a package manager for the Termux terminal emulator on android using the APK format. The program is written in C and uses various arguments like 'sync', and 'remove'. However, the function I have written doesn't recognize the argument I have written for the name of the package to 'sync'. 'sync' is meant to download an apk from the fdroid repositories and open it using xdg-open (not yet implemented) using the name of the apk given in the arguments.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void syncapk(char * apkname);

int main(int argc, char **argv)
{
    if(argc==1) {
        printf("Displaying help screen.\n");
    } else if(argc>=2) {
        if(strncmp(argv[1], "sync\n", 4) == 0) {
            syncapk(argv[2]);
        } else if(strncmp(argv[1], "upgrade", 7) == 0) { 
            printf("Upgrading all packages!\n");
        } else if(strncmp(argv[1], "remove", 6) == 0) { 
            printf("Removing package!\n");
        }
    }
    return 0;
}

void syncapk(char * apkname) {
    printf("Syncing package: %s!\n", apkname);
    char * synccmd = "fdroidcl download %s", apkname;
    system(synccmd);
}

GCC (my compiler) says that the argument (the name of the apk I wish to download from the repositories) is 'redeclared as a different symbol'. I am fairly new to writing programs in C so feel free to critique other things, not just the problem itself and whether I could take a different approach completely.

CodePudding user response:

This doesn't do what you think it does:

char * synccmd = "fdroidcl download %s", apkname;

This is defining a variable of type char * named synccmd and a variable of type char named apkname. The latter conflicts with the parameter of the same name, hence the error.

If you want to build a formatted string, you need to use sprintf to do that:

char synccmd[100];
sprintf(synccmd, "fdroidcl download %s", apkname);
  •  Tags:  
  • c
  • Related