передача аргументов в основной

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

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

И я вызываю программу следующим образом:

  ./sort 4 <text.txt 

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

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

 #include  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» является указателем на массив символов, и вам, возможно, придется разобрать его на целое число.

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

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

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

Это не аргумент для вашей программы, а для оболочки. Это входное redirect , что означает, что вход файла поступает в программу, как если бы он поступал из stdin (клавиатуры).

Чтобы предотвратить это, просто позвоните в программу следующим образом:

 ./sort 4 text.txt 

Я не уверен, что функция «сортировка», которую вы вызываете.