2015-10-16 5 views
0

Я создаю многопоточную программу с использованием алгоритма банкиров, есть все это трудно кодируется и скомпилированным, но у меня возникает проблемы заполнения начального available массива из пользовательского вводаС - Сохранением основных() аргументов в массиве

#DEFINE NUMBER_OF_RESOURCES 3 

int available[NUMER_OF_RESOURCES];  //available will be length of argc i.i number of total resoruces 

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

printf("AVAILABLE RESOURCE: \n ["); 
//Populate Available Resource Array 
for (i = 1; i < argc; i++) 
{ 
    available[i-1] = argv[i]; 
    printf("%d ", available[i]); 
} 
printf("] \n\n"); 
} 

при выполнении с: ./a.out 10 7 5

Он печатает:

[1604031496 1604031499 1604031501 ] 
+3

Элементы 'argv' являются строками, а не цифрами. Распечатайте их с помощью '% s', а не'% d'. – Barmar

+0

Каков тип переменной 'available'? –

+0

'доступно [i-1] = atoi (argv [i]); printf ("% d", доступно [i-1]); ' – BLUEPIXY

ответ

5

Вы не можете преобразовать строку s для целых чисел с обычным присваиванием (вы должны были получить предупреждение компилятора о присвоении char*int без литья). Вызовите atoi(), чтобы проанализировать целые числа.

available[i-1] = atoi(argv[i]); 
+0

Возможно, вы не получите сообщение об ошибке, если компилятор использует 32-разрядные указатели, и это может быть то, что вы на самом деле хотели сделать. – Jerfov2

+1

@ TheTromboneWilly Размер указателей не имеет значения, они все еще разные. Любой достойный компилятор должен предупреждать об автоматических преобразованиях, подобных этому. – Barmar

+0

Да, это справедливо – Jerfov2

0
  1. Использование atoi для преобразования строки в int.
  2. Убедитесь, что вы не имеете доступа к available за пределы.
for (i = 1; i < argc && i < NUMER_OF_RESOURCES+1; i++) 
{ 
    available[i-1] = atoi(argv[i]); 
    printf("%d ", available[i-1]); 
} 
+0

Возможно, вы имели в виду 'i-1'? –

+0

@BenVoigt, конечно :) –