Там нет ни одного. Это связано с тем, что массивы будут переходить в указатель на первый элемент при переходе к функции.
Вы должны либо сами передать длину, либо использовать что-то в самом массиве для указания размера.
Во-первых, опция «передать длину». Вызовите свою функцию с чем-то вроде:
int setIncludes (char *includes[], size_t count) {
// Length is count.
}
:
char *arr[] = {"Hello,", "my", "name", "is", "Pax."};
setIncludes (arr, sizeof (arr) / sizeof (*arr));
setIncludes (arr, 2); // if you don't want to process them all.
Метод стража использует специальное значение в конце, чтобы указать, что больше нет элементов (аналогично \0
в конце массива C char
для обозначения строки), и будет выглядеть примерно так:
int setIncludes (char *includes[]) {
size_t count = 0;
while (includes[count] != NULL) count++;
// Length is count.
}
:
char *arr[] = {"Hello,", "my", "name", "is", "Pax.", NULL};
setIncludes (arr);
Другой метод, который я видел (в основном для целочисленных массивов), заключается в использовании первого элемента в качестве длины (аналогично переменным ствола Rexx):
int setIncludes (int includes[]) {
// Length is includes[0].
// Only process includes[1] thru includes[includes[0]-1].
}
:
int arr[] = {4,11,22,33,44};
setIncludes (arr);