передача аргументов на главную - PullRequest
1 голос
/ 11 февраля 2012

Я знаю, что это довольно просто, но я все еще застрял.Итак, у меня есть функция, которая должна принимать переменную n, так что это моя основная функция

int main(int argc, char* argv){
  sort(argv[1]);
    }

И я вызываю программу так:

    ./sort 4 <text.txt

Ночисло 4 не распознается или не передается в функцию.Что я делаю неправильно?Я знаю, что argv [0] должен содержать имя самой программы, а каждая из них должна содержать аргументы.

Ответы [ 3 ]

7 голосов
/ 11 февраля 2012

Вы должны попытаться распечатать их все.

#include <stdio.h>

int main(int argc, const char *argv[])
{
    int i = 0;
    for (; i < argc; ++i) {
        printf("argv[%d] = '%s'\n", i, argv[i]);
    }
    return 0;
}

Запуск этого кода с ./a.out 4 < /somefile дает мне:

argv[0] = './a.out'
argv[1] = '4'

В конце концов вам придется помнить, что «4» - это указатель на массив символов, и вам, возможно, придется разобрать его в целое число.

3 голосов
/ 11 февраля 2012

char *argv неверно.Вам передают массив char* («Строки»), поэтому правильный способ объявления main будет int main(int argc, char *argv[]) или эквивалентно int main(int argc, char **argv) (в последнем случае аргумент массива эффективно преобразуется в указатель напервый элемент массива).

То, что вы извлекаете в текущей версии кода, является вторым char в массиве аргументов-указателей, предоставленных вам средой, повторно интерпретированной как массив символов, что является чем-то совершенно другим.

0 голосов
/ 11 февраля 2012

Как описано другими, вы знаете, как получить все аргументы, но не "

...