Аргументы командной строки по умолчанию в C - PullRequest
1 голос
/ 28 декабря 2010

$ ./Main a

int main(int argc, char * argv[]) {
int i;
for(i=1;i<argc;i++){
    if(argv[i] == NULL){ //This line does not work!
        argv[i] = "Null";
    }
}
theMenu(argv[1], argv[2], argv[3], argv[4]);
return (EXIT_SUCCESS);}

В функции Menu, когда я вызывал strcmp (argv [2], argv [3]);У меня будет ошибка сегментации ((

Как сделать argv [x] = "Null", когда пользователь не ввел параметр в x?

Ответы [ 4 ]

4 голосов
/ 28 декабря 2010

CRT не будет вставлять пустые записи для аргументов, которые вы не получили. Это просто уменьшит значение argc. Если у вас должно быть четыре аргумента, вы можете определить свой собственный массив в стеке.

int main(int argc, char * argv[]) {
    char* args[4] = { 0 };
    int i;
    for(i=1;i<argc && i < 4;i++){
         args[i] = argv[i];
    }
    for(int i = 0; i < 4; i++) {
        if (args[i] == NULL)
            args[i] = "Null";
    }
    theMenu(argv[1], argv[2], argv[3], argv[4]);
    return (EXIT_SUCCESS);
}
2 голосов
/ 28 декабря 2010

Вы не можете. Что вы можете сделать, так это определить свой собственный массив размером [4], инициализированный пустыми строками или пустыми значениями, и скопировать туда аргументы (до количества аргументов).

1 голос
/ 28 декабря 2010

Ваша проблема в том, что argc <5, и вы пытаетесь получить доступ к элементам argv, которые не определены. </p>

1 голос
/ 28 декабря 2010

Вы ожидаете 4 аргумента.Почему бы не перехватить это так:

if (argc==5)
{
//code here
}

(это 5, потому что при запуске кода есть аргумент [0])

...