Вы на самом деле не можете передать массив в функцию.Что происходит, когда вы это делаете, это то, что вместо этого передается указатель на первый элемент в массиве.(Этот процесс часто описывается как «массив распадается на указатель»).
То есть
set(alert, index, p);
Это то же самое, что и:
set(&alert[0], index, p);
(Обратите внимание, что вы назвали его как set(alert[5], index, p);
, это просто передает элемент 6. вашего массива, что, кстати, является недопустимым, поскольку в вашем массиве есть место только для 5 элементов.)
Итак, что вы делаетекогда вы хотите передать массив функции, вы
- передаете указатель на первый элемент массива (это можно сделать, просто написав
name_of_array
или &name_of_array[0]
- Добавьте еще один аргумент, который является длиной массива. Это может понадобиться, как если бы ваш массив мог иметь разные размеры, и вы не можете знать, сколько элементов в массиве, если все, что вы получили, это указатель на его первый элемент:
Давайте пока пропустим пункт 2. выше, вы можете просто сделать:
//PALERT is already a pointer, otherwise specify the first argument as:
//ALERT *palertMerch
int set(PALERT palertMerch, int *merchnoIndex, char * txnMerchant)
{
strcpy(palertMerch[*merchnoIndex]->MerchantNo, txnMerchant);
*(merchnoIndex) = *(merchnoIndex) + 1 ;
return 0;
}
И назвать это как:
char *p = "SACHIN";
int index = 0;
set(alert, index, p);
Кстати, если у вас нетхорошая причина, старайтесь не скрывать указатель в typedef, как это делается в typedef Alert *PALERT;
, что часто приводит к путанице.