Как прочитать «строку» из аргумента командной строки в C? - PullRequest
7 голосов
/ 18 февраля 2011

У меня вопрос о передаче параметров через командную строку.

Мой main() выглядит как

int main(int argc, char **argv){
  int b, d, n, flag;  
  char *init_d, tst_dir[100];

  argv++;
  init_d=*(argv++);
  //printf(); <--------What do I have to do to init_d so that I can print it later?

Если argv - указатель на массив указателейЯ присваиваю init_d указатель на значение, на которое указывает указатель argv?(Если это даже имеет смысл)

Я предполагаю, что мне нужно передать это значение в массив символов, чтобы распечатать его, но если я не знаю размер "строки", которую я передаю,Я не уверен, как этого добиться.Например, если я запускаю свой код «./myprogram hello» по сравнению с «./myprogram вдольerinput»

Ответы [ 6 ]

14 голосов
/ 18 февраля 2011

Вы можете печатать аргументы, не переводя их в символьные массивы.Это строки C с нулевым символом в конце и printf ест их на завтрак:

for (i=0; i<argc; i++)
  printf("%s\n", argv[i]);  
4 голосов
/ 06 августа 2013

Вот пример, который преобразует аргументы командной строки в одну строку:

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

int main(int argc, char *argv[]) {
    if (argc < 1)
        return 0;

    int i;
    int strsize = 0;
    for (i=1; i<argc; i++) {
        strsize += strlen(argv[i]);
        if (argc > i+1)
            strsize++;
    }

    printf("strsize: %d\n", strsize);

    char *cmdstring;
    cmdstring = malloc(strsize);
    cmdstring[0] = '\0';

    for (i=1; i<argc; i++) {
        strcat(cmdstring, argv[i]);
        if (argc > i+1)
            strcat(cmdstring, " ");
    }

    printf("cmdstring: %s\n", cmdstring);

    return 0;
}
4 голосов
/ 18 февраля 2011

argv - указатель на массив строк с нулевым символом в конце. Вам не нужно знать размер строки; все, что вам нужно сделать, это указать на значение, так как конец строки обозначен '\ 0'.

char* init_d = argv[0];
printf("%s", init_d);

Если вы хотите узнать длину строки, вы можете использовать strlen(argv[0]).

3 голосов
/ 18 февраля 2011
int main(int argc, char **argv){ 

    while(--argc>0)
       printf("%s\n",*++argv);
    return 0;
}

argc: argument count i.e. number of arguments in command line
argv: argument vector 

если ваша программа myProg, то myProg hello в командной строке имеет argc = 2 (включая имя программы), argv [0] - это «myProg», а argv [1] - «привет»

2 голосов
/ 18 февраля 2011

После запуска

init_d = *(argv++);

(паренсы не обязательны, кстати), init_d - указатель на символ. В C строка - это символьный указатель, который придерживается контракта, и если он продвинется достаточно далеко, в конечном итоге будет достигнут нулевой символ ('\ 0'), обозначающий конец строки. Другими словами, теперь init_d - это именно та строка, которую вы хотите. Вы можете распечатать его с помощью

printf("%s", init_d);

Обратите внимание: кстати, * argv ++ предоставляет вам первый элемент argv, который фактически является именем функции в командной строке. Возможно, вам нужен первый аргумент командной строки, который вы получите с помощью * ++ argv.

0 голосов
/ 18 февраля 2011

Вы можете вывести строку, на которую указываете init_d с помощью

printf("%s", init_d);

"% s", выводить все символы строки, пока она не достигнет '\ 0'.В Си строки заканчиваются нулем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...