La respuesta corta es "no"; en C, no hay forma de obtener la cantidad de elementos en una matriz según la expresión de matriz sola. El truco sizeof
es casi tan bueno como se puede esperar, y su uso está limitado a las expresiones del tipo de matriz. Por lo que el siguiente no funcionará:
char *foo = malloc(1024);
size_t count = sizeof foo;
count
recibe el número de bytes para el tipo de puntero (4 en una arquitectura típica de escritorio), no en el bloque asignado.
char arr[100];
char *p = arr;
size_t count = sizeof p;
Igual que el anterior.
void foo(char *arr)
{
size_t count = sizeof arr; // same as above
...
}
void bar(void)
{
char array[100];
foo(array);
...
}
Igual que el anterior.
Si necesita saber cuántos elementos hay en una matriz, debe rastrear esa información por separado.
El tratamiento de las matrices de C es la fuente de un lote de acidez estomacal.
posible duplicado de [¿Hay una función estándar en C que devuelva la longitud de una matriz? ] (http://stackoverflow.com/questions/1598773/is-there-a-standard-function-in-c-that-would-return-the-length-of-an-array) –
El tratamiento de C de las matrices es la fuente de una gran cantidad de acidez. –