2013-09-16 2 views
0

Я не уверен, что это правильный способ сделать это. См. Мой код ниже. Я хочу иметь возможность передать список аргументов main, который затем будет храниться в другом массиве.C - Передача переменного количества аргументов в начало

Итак, я хочу начать программу с хотя бы одним аргументом ... или столько аргументов, сколько мне нравится. Я могу установить максимальное количество аргументов до 32.

Например.

./foo 3

Или

./foo 3 56 12 34 56 111 2222 33

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


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


    if (argc <= 1){ 
      printf("Not enough arguments entered\n"); 
      exit(1); 
    } 
    printf("Arg count %i\n",argc-1); 


    for (i=1;i<argc;i++) 
      numbersEntered[i]=atoi(argv[i]); 
    for (i=1;i<argc;i++) 
      printf(" numbersEntered %i\n", numbersEntered[i]); 

}

+2

Выглядит хорошо, если ваш компилятор поддерживает массивы переменной длины. Почему вы беспокоитесь, что это может быть неправильным? – us2012

+0

После написания ответа я озадачен, ваша программа уже делает именно то, что вы хотите, в чем вопрос? :-) –

+0

Почему вы индексируете numbersEntered от 1 вместо 0? Вы оставляете numberEntered [0] uninitialised. – goji

ответ

2

Это уже случай, argv является массивом указателей, один указатель на каждый аргумент в командной строке (плюс два, фактически, первый - это имя программы, затем аргументы, а затем завершающий NULL-указатель).

Что касается массива, проблема в том, что традиционный C требует размера, который известен во время компиляции, вы не можете просто использовать argc; что некоторые компиляторы, такие как GCC, и более современные стандарты C, действительно позволяют.

+3

Массивы переменной длины являются нестандартными по сравнению с C90, стандартной функцией языка C99 и необязательной особенностью языка с C11. –

+0

Я использую малину Pi .. как я могу подтвердить стандарт C, который я использую? – Mwilliams03

+0

@ Mwilliams03 Если ваш компилятор принимает вышеуказанную программу, вы в порядке. Кроме того, вы, вероятно, используете какой-то GCC, который традиционно поддерживает массивы переменной длины, не зависящие от языкового стандарта. –

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