Sprintf с указателями, константами и форматированием строк

Я новичок в C, и у меня были проблемы с упрощением этой программы. Я пытаюсь инициализировать name один раз и strcatname в command один раз Это исполняемый файл командной строки, который принимает два аргумента и один необязательный аргумент для имени файла "новый py" или "новый txt", или "новый скрипт py". Я запускаю MinGW Windows для компиляции.

Есть ли тип, позволяющий хранить значение argv и строковую константу с одной строкой?

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

1 ответ

Решение

Как упомянуто BLUEPIXY, мой блок должен включать " char name[20]; if(argc == 3){ strcpy(name, argv[2]); } else { sprintf(name,"new %s file",type); } strcat(command, name); ". После этих изменений я преобразовал все strcat с одного sprinf,

Мое предыдущее понимание хранения argv было то, что указатели на символы были необходимы для компиляции, потому что аргументы не были бы определены. Они больше не нужны из-за инициализации name,

Мой теперь сокращенный код:

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

BLUEPIXY раз, спасибо вам, BLUEPIXY, за BLUEPIXY моего недопонимания.

Другие вопросы по тегам