Типы аргументов Argv по умолчанию - PullRequest
0 голосов
/ 31 марта 2012

Какие типы данных argv по умолчанию?

Я хочу получить 2 аргумента из строки cmd и передать эти аргументы в fts_open с возвращаемым значением fts_read. сначала путь к исходной папке, а второй путь к выходному файлу.

Ранее я передавал argv + 1, и он отправлял первый аргумент, а также второй аргумент, поэтому исходный и выходной путь были включены в пути для прохождения.

Я хочу только указать исходный путь для fts_open.

Я знаю, что fts_open принимает завершенный список NULL, я хотел бы создать это из первого аргумента, источника. У меня было несколько предупреждений, касающихся различных типов данных.

Я просто хочу взять первый аргумент и сохранить его в символе *, а затем создать из него список с завершением NULL и передать его в fts_open.

Ответы [ 3 ]

2 голосов
/ 31 марта 2012

Прямой ответ на заглавный вопрос - char **, но я не думаю, что это действительно вам сильно поможет.

По крайней мере, если я правильно понимаю, то, что вы хотите, это что-то вроде этого:

char *args[2];

args[0] = argv+1;
args[1] = NULL;

fts_open(args);
1 голос
/ 31 марта 2012

Вам необходимо скопировать рассматриваемый аргумент в новый список, который включает только этот аргумент и окончательный указатель NULL

int main(int argc, char **argv) {
    if (argc < 2) /* error */;
    char **copy = malloc(2 * sizeof *copy);
    copy[0] = malloc(strlen(argv[1]) + 1);
    if (!copy[0]) /* error */;
    strcpy(copy[0], argv[1]);
    copy[1] = NULL;

    whatever(copy/*, ... */);

    /* ... */

    free(copy[0]);
    free(copy);
}
1 голос
/ 31 марта 2012

Если ваша main функция имеет подпись (int, char**), то второй аргумент - это указатель на первый элемент массива с нулевым символом в конце char*, каждый из которых сам по себе является указателем на первый элементТерминал с нулевым символом в конце char s, представляющий строки аргументов программы.

Вы можете напечатать их так:

for (char ** p = argv; *p; ++p)
{
    printf("Argument: %s\n", *p);
}

Или распечатать их сзади:

while (argc--) { printf("Argument %i: %s\n", argc, argv[argc]); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...