Доступ к аргументам командной строки в C - PullRequest
3 голосов
/ 26 июля 2010

пожалуйста, прости меня, если это нубский вопрос, но я новичок в C, учусь только на некоторое время.Я попытался написать программу, которая суммирует два числа (предоставленные в качестве параметров приложения).Код выглядит так:

#include <stdlib.h>
#include <stdio.h>

int main( int argc, char** argv)
{
   int a = atoi(argv[0]);
   int b = atoi(argv[1]);
   int sum = a+b;
   printf("%d", sum);
   return 0;
}

Но я получаю неверные результаты - огромные цифры даже для небольших входов, таких как 5 и 10. Что здесь не так?

Ответы [ 5 ]

18 голосов
/ 26 июля 2010

Первым аргументом для программы является имя самой программы. Попробуйте вместо этого использовать следующее.

int a = atoi(argv[1]); 
int b = atoi(argv[2]); 
3 голосов
/ 26 июля 2010

Это потому, что argv [0] - это имя вашего исполняемого файла.

Вы должны использовать argv [1] и argv [2].

И убедитесь, что счетчик (argc) равен 3.

1 голос
/ 26 июля 2010

Предполагая, что имя вашей программы noob.c, и вы компилируете ее с gcc ./noob.c -o noob. Вы должны внести эти изменения.

int a = atoi(argv[1]); 
int b = atoi(argv[2]);

Вы должны запустить его ./noob 1 2, и вуаля вывод будет 3.

argc - это 3, а именно число аргументов командной строки, ваш ввод будет первым и вторым значениями из командной строки.

1 голос
/ 26 июля 2010

Вы захотите использовать argv[1] и argv[2].

Первый элемент в argv (argv[0]) - это сама команда .Это будет имя исполняемого файла вашей программы ...

0 голосов
/ 26 июля 2010

Это потому, что argv[0] - это имя программы, а не первый аргумент (т. Е. Если вы запускаете myapp 4 5, argv становится myapp, 4, 5).

...