R0 CREW

Размер массива указателей. (size of pointer array)

Господа, как узнать размер массива?
Результат консоли.

apple is fruit
orange is fruit
grape is fruit
banana is fruit
UW1�VS�u������ is fruit

apple is FRUIT
orange is FRUIT
grape is FRUIT
banana is FRUIT
UW1�VS�u������ is FRUIT

#include <stdio.h>
#include <string.h>

char* ser1(char* a[])
{
    char **ptr = a;
    while(*ptr){
        printf("%s is fruit\n", *ptr);
        ptr++;
    }
    printf("\n\n\n");
}
char* ser2(char* a[])
{
    for(a; *a != '\0';++a)
    {
        printf("%s is FRUIT\n", *a);
    }
}

int main()
{
    char *fruit[] = {"apple","orange", "grape", "banana"};
    ser1(fruit);
    ser2(fruit);
}

Да никак в том то и прикол Си, передавай его вторым параметром. Ты можешь так по памяти ходить, и даже случайно форматнуть себе винт например, “веревка достаточной длины” в общем. :slight_smile:

Если размер массива не задан в текущей функции, то никак. Однако часто поступают так: последний элемент массива, к примеру указателей, устанавливают в 0, в вашем случае необходимо сделать так:

#include <string.h>
#include <stdio.h>

void ser1(char* a[])
{
    char **ptr = a;
    while(*ptr){
        printf("%s is fruit\n", *ptr);
        ptr++;
    }
    printf("\n\n\n");
}
void ser2(char* a[])
{
    for(a; *a != 0;++a)
    {
        printf("%s is FRUIT\n", *a);
    }
}

int main()
{
    char *fruit[] = {"apple","orange", "grape", "banana", 0};
    ser1(fruit);
    ser2(fruit);
}

Спасибо решение подошло.