2015-09-28 7 views
0

Так что я запутался, как именно аргументы командной строки работает в C ... поэтому у меня есть эти аргументы командной строки, которые я даю:C - Аргументы командной строки как строки?

./myclient1 MyPCName 12 7894 

Так что я хочу, чтобы прочитать argv[2] (12) как строку .. но я смущен точно, как значения хранятся в командной строке. Я посмотрел на оба this SO сообщение, this это link, но я все еще смущен ... что такое тип данных argv[2]? Это целое число? Или все аргументы командной строки изначально строки? Так argv[2] на самом деле:

argv: 
    [0] 
    [1] 
    [2] --> 1 | 2 | \0 

Я просто действительно путают .... В настоящее время, я просто преобразуется в целое число с помощью atoi(), а затем преобразуется обратно в строку, используя snprintf, но это не работает правильно, и я Мне интересно, нужно ли мне вообще это делать.

Я новичок в C, поэтому любая помощь будет принята с благодарностью, спасибо!

[править]

это то, что я делал раньше:

int main(int argc, char *argv[]) 
{ 
clientID = atoi(argv[2]); 
snprintf(clibuff,300,"%d",clientID); //now clibuff has the value of 
             //clientID in a string. 
} 
+0

Пожалуйста, разместите код, который вы пробовали. – QuestionC

+2

Все аргументы командной строки входят в виде строк. – QuestionC

ответ

1

размещаемой реализации C (например, вы наверняка используете) позволяет точно две подписи для main(), и если вы хотите получить доступ к аргументам командной строки, то только один будет делать:

int main(int argc, char *argv[]); 

Вы можете записать это в паре другие, эквивалентные способы, но я предпочитаю это, потому что он подчеркивает характер массива argv. Каждый элемент, конечно, указывает на один из первых символов стандартной строки C, содержащей соответствующий аргумент командной строки. Таким образом, тип argv[2] всегда равен char *, и вам не нужно ничего делать, чтобы обрабатывать его как строку C.

+0

спасибо ... Я думаю, что этот ответ сделал вещи намного яснее. – ocean800

3

аргументы командной строки хранятся в виде массива заканчиваются нулем.

Так, чтобы ответить на ваш вопрос, тип argv[2] является char *

Тип argv является char **

+0

Ох ... спасибо, я вижу. Итак, мое понимание было в основном правильным. Итак, '12' хранится как строка с массивом' char' .... – ocean800

1

копию вашего тестового кода будет полезно ..

Я обычно объявляем ARGV таким образом:

int main(int argc, char **argv); 

При запуске программы, аргументы основным будет инициализированы к этому:

  • argc больше нуля.
  • argv [argc] - нулевой указатель.
  • argv [0] to argv [argc-1] - указатели на строки
  • argv [0] будет строкой, содержащей имя программы или пустую строку, если она недоступна. Остальные элементы argv представляют аргументы, предоставленные программе.

Это Testprogram должно работать:

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

int main(int argc, char **argv) 
{ 
     while(argc--) 
       printf("%s\n", *argv++); 
     exit(EXIT_SUCCESS); 
} 
0

ARGV [0] всегда название вашей программы, да и все ваши аргументы строки, вы должны считать свои аргументы с ARGV [1].

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