2016-04-10 4 views
-1

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

Существует ли тип, позволяющий хранить значение 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

'char * name = argv [2];' и 'char name [20];' находятся в локальной области блока if-else. Исправить пример: 'char name [20]; if (argc == 3) {strcpy (имя, argv [2]); } else {sprintf (имя, «новый файл% s», тип); } strcat (команда, имя); ' – BLUEPIXY

+0

Спасибо. На данный момент это исправлено. Как вы думаете, я мог бы «sprintf» остальную команду вместо strcats? –

+0

Либо в вашем любимом. – BLUEPIXY

ответ

0

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

+0

Обратите внимание, что может произойти что-то ужасное, если 'name' или' type' содержит '' '. Убедитесь, что эти вещи поступают только из полностью доверенных источников, которые знают об ограничениях этой программы. –

+0

Примечание: для улучшения удобства используйте' snprintf () ' – wildplasser