Duplicar posibles:
length of array in function argument¿Cómo obtener la longitud de la matriz del puntero C?
¿Hay algún método como el de Java puede .length de un conjunto de puntos de C? Gracias.
Duplicar posibles:
length of array in function argument¿Cómo obtener la longitud de la matriz del puntero C?
¿Hay algún método como el de Java puede .length de un conjunto de puntos de C? Gracias.
No, dado un puntero C, no puede determinar su longitud de una manera independiente de la plataforma.
Para una matriz real C, aunque ver la answer
usted podría conseguir utilizando una macro dirkgently:
#define sizeofa(array) sizeof array/sizeof array[ 0 ]
si y sólo si la matriz es automático y se accede a él en el alcance de su definición como:
#include <stdio.h>
int main() {
int x[] = { 1, 2, 3 };
printf("%zd\n", sizeofa(x));
return 0;
}
sin embargo, si sólo tiene un (cariado) que puntero no puede obtener la longitud de la matriz sin recurrir a alguna aplicación no portátil hack específico.
"% z" ?? ¿Qué quieres decir? – user411313
* z * _Especifica que el siguiente especificador de conversión d, i, o, u, x o X se aplica a un 'size_t' o al correspondiente argumento de tipo entero con signo; o que un especificador de conversión n siguiente se aplica a un puntero a un tipo de entero con signo correspondiente al argumento size_t._ – dirkgently
Esa macro necesita muchos más paréntesis para evitar problemas de macro comunes. –
Si utiliza MSVC/MinGW no es una solución no portátil para un verdadero C-puntero:
#include <malloc.h>
char *s=malloc(1234);
#ifdef __int64
printf("%lu\n", _msize(s));
#else
#endif
Para un verdadero C-Array como
AnyType myarray[] = {...};
o
AnyType myarray[constVal];
vea la otra respuesta.
La pregunta no es muy clara; Siempre puede obtener la longitud de la matriz si su definición es de alcance local ;-) – dirkgently
@dirkgently, estoy de acuerdo, no está claro si están pidiendo una longitud de puntero o longitud de matriz. Los redirigí a tu respuesta para el último – JaredPar