Search code examples
cpointersprintfargvargc

Sprintf with pointers, constants and string formatting


I am new to C and I have had trouble simplifying this program. I am trying to initalize name once and strcat name to command once. It is a command line executable that takes two args and one optional arg for the filename "new py" or "new txt", or "new py script". I run Windows's MinGW to compile.

Is there a type to allow storage of argv value and a string constant with one line?

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

int main(int argc, char *argv[]) {
    char command[100] = "cd . > ";
    char *type = argv[1];
    char * name;
    strcat(command,"\"");
    if (argc == 3) {
        char * name = argv[2];
        //strcat(command,name);
    } else {
        char name[20];
        sprintf(name,"new %s file",type);
        //strcat(command,str);
    }
    strcat(command,name);
    strcat(command,".");
    strcat(command,type);
    strcat(command,"\"");
    system(command);
    return 0;
}

Solution

  • As mentioned by BLUEPIXY, my block needs to include "char name[20]; if(argc == 3){ strcpy(name, argv[2]); } else { sprintf(name,"new %s file",type); } strcat(command, name);". After those changes, I converted all of the strcats to one sprinf.

    My previous understanding of storing argv items was that char pointers were needed for compilation because args wouldn't be defined. They are not needed any more because of the initialization of name.

    My now condensed code is this:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char *argv[]) {
        char command[100];
        char * type = argv[1];
        char name[50];
        if (argc == 3) {
            strcpy(name, argv[2]);
        } else {
            sprintf(name,"new %s file",type);
        }
        sprintf(command,"cd . > \"%s.%s\"",name,type);
        system(command);
        return 0;
    }
    

    Again, thank you BLUEPIXY for clearing my misunderstanding.