2014-02-02 4 views
0

Я только начал изучать C, и у меня есть основной вопрос. Как я могу прочитать аргумент командной строки. Например, если я исполню:Как инициализировать массив символов с аргументом командной строки в C

 ./main "test" 

Как я могу получить параметр командной строки «тест» в переменную:

  int main(int argc, char **argv){ 
      char s[] is supposed to equal "test" 
     } 

EDIT: В основном я хочу, чтобы создать новый массив символов, который равен ARGV [1].

+1

Введите 'strdup()' (POSIX). Или 'char arr [strlen (argv [1]) + 1];' и 'strcpy (arr, argv [1])' ... –

ответ

0
char * s = argv[1];//to read the test 
if(strcmp(s,"test") == 0){ 
    //the command line argument is equal to the string test 
} 
+0

ваша программа сработает, если нет аргумента, данного – thumbmunkeys

+0

Я не написал полную программу .. Я только объясняю, как достичь поставленной задачи. –

+0

@thumbmunkeys Irrelevant. OP ищет случай, когда ** ** является аргументом. Нет необходимости в таком типе. И пока мы находимся в этом: вы утверждаете, что «argv [0] - это имя программы (main), argv [1] - это первый параметр» - это не универсально, это зависит от реализации. –

0

Аргументов argc и argv основной функции используются для доступа строковых аргументов, передаваемых в программу при ее запуске. argc - количество переданных аргументов. Например, при запуске как это - ./myprogram arg1 arg2 arg3, argc будет иметь значение 4. Это связано с тем, что вместе с строками, переданными пользователем в имени программы, также передается. То есть argv[0] указывает на строку myprogram, argv[1] указывает на arg1 и т. Д. Чтобы получить n-й аргумент, вы должны получить доступ к argv[n + 1].
Зная это, чтобы сделать копию первого аргумента можно сделать следующим образом

char * s = malloc(strlen(argv[1]) + 1); 
strcpy(s, argv[1]); 

Однако я бы посоветовал убедиться, что аргумент вы хотите не указывает на NULL перед копированием его. Здесь argc удобен. Перед доступом к argv[1] я бы проверил, argc >= 2.

Существует гораздо лучшее объяснение здесь http://crasseux.com/books/ctutorial/argc-and-argv.html или здесь http://www.cprogramming.com/tutorial/c/lesson14.html

Edit: Помните, чтобы освободить памяти, выделенной с помощью free
например. free(s).

Смежные вопросы