Итак, я пытаюсь выделить непрерывное пространство памяти, а затем инициализировать его аргументами из командной строки, но, похоже, у меня есть некоторые проблемы с присвоением значений вектору. Вот мой код:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* args[])
{
int dim;
printf("Enter size of the block: ");
scanf("%d", &dim);
int* m1 = calloc(dim, sizeof(int));
if(m1 == NULL)
{
printf("Error! memory not allocated.");
exit(0);
}
for(int i = 0; i < dim; i++)
{
m1[i] = (atoi)args[i + 1];
}
for (int i = 0; i < dim; i++)
{
printf("m1's value %d: %d\n", i,*(m1 + i));
}
return 0;
}
Когда я пытаюсь скомпилировать его, он выдает 1 предупреждение и 1 ошибку
Es6.c:20:10: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
m1[i] = (atoi)args[i + 1];
^
Es6.c:20:18: error: expected ‘;’ before ‘args’
m1[i] = (atoi)args[i + 1];
Я использую atoi для преобразования аргумента (находится в аргументах) в инт. Является ли m1 вектором? Насколько я знаю, это указатель на начало вектора, который я инициализировал с помощью callo c, если это правильно, то почему это вызывает у меня проблемы? Когда я изменяю:
m1[i] = (atoi)args[i + 1];
на
m1[i] = *args[i + 1];
, это работает, но результаты не похожи на аргументы, которые я передал. Я предполагаю, что я передаю адрес, а не фактические аргументы, хранящиеся в нем. Ps Когда я передаю аргументы из файла, это возвращает мне ошибку сегментации, почему это так? (Это с реализацией * args [i + 1].