Преобразование «целочисленных строк» ​​в целочисленный массив

Я пытаюсь передать массив целых чисел в свою программу. Есть ли лучший способ преобразовать его в целые числа? В настоящее время я получаю сообщение об ошибке: "Объект переменного размера не может быть инициализирован"

for(i = 0; i < argc; i++)
{
    int arr[i] = atoi(argv[i]);
}

person Brian Maher    schedule 20.10.2013    source источник


Ответы (2)


Предполагая, что argc и argv являются аргументами, передаваемыми в main, маловероятно, что argv[0] является чем-то, что вы хотите преобразовать в целое число. argv[0] обычно содержит название программы.

Ваш фрагмент кода объявляет массив, локальный для тела цикла. Скорее всего, вам нужен массив, определенный вне тела цикла, и вы хотите присвоить его отдельным элементам массива в теле цикла.

int arr[argc];
for(i = 1; i < argc; i++)
{
    arr[i] = atoi(argv[i]);
}
person jxh    schedule 20.10.2013
comment
Я забыл, что первым аргументом является имя программы. Решено! Спасибо! - person Brian Maher; 20.10.2013

Вы объявляете свой массив arr каждый раз, когда выполняете цикл.

измените свой цикл следующим образом:

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

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

    int arr[argc];
    int i=0;


    for(i = 0; i < argc-1; i++)
    {
       arr[i] = atoi(argv[i+1]);
       printf("arr[%d] = %d\n",i,arr[i]);
    }

    return 0;
}

Вот результат:

Sukhvir@Sukhvir-PC ~
$ gcc -Werror -Wall -g -o test test.c

Sukhvir@Sukhvir-PC ~
$ ./test 3 4 5
arr[0] = 3
arr[1] = 4
arr[2] = 5
person sukhvir    schedule 20.10.2013