Mögliche Duplizieren:
length of array in function argumentWie erhält man die Länge des C-Pointer-Arrays?
Gibt es eine Methode, wie die Java aus einem C-Punkt-Array .length? Vielen Dank.
Mögliche Duplizieren:
length of array in function argumentWie erhält man die Länge des C-Pointer-Arrays?
Gibt es eine Methode, wie die Java aus einem C-Punkt-Array .length? Vielen Dank.
Nein, mit einem C-Zeiger können Sie seine Länge nicht in einer plattformunabhängigen Art bestimmen.
Für eine tatsächliche C-Array obwohl sehen dirkgently ist answer
Sie es bekommen konnte mit einem Makro:
#define sizeofa(array) sizeof array/sizeof array[ 0 ]
, wenn und nur wenn das Array automatisch und Sie Zugriff auf sie im Rahmen ihrer Definition wie:
#include <stdio.h>
int main() {
int x[] = { 1, 2, 3 };
printf("%zd\n", sizeofa(x));
return 0;
}
jedoch haben, wenn Sie nur eine (verfallenen) Zeiger Sie die Array-Länge, ohne auf einige nicht-portable Implementierung bekommen spezifischer Hack.
"% z" ?? Was meinen Sie? – user411313
* z * _Gibt an, dass ein folgender d-, i-, o-, u-, x- oder X-Konvertierungsbezeichner für ein 'size_t' oder das entsprechende vorzeichenbehaftete ganzzahlige Argument gilt; oder dass ein folgender n-Konvertierungsbezeichner für einen Zeiger auf einen signed Integer-Typ gilt, der dem Argument size_t entspricht._ – dirkgently
Dieses Makro benötigt viel mehr Klammern, um häufige Makroprobleme zu vermeiden. –
Wenn Sie MSVC/MinGW verwenden gibt es eine nonportable Lösung für einen echten C-Zeiger:
#include <malloc.h>
char *s=malloc(1234);
#ifdef __int64
printf("%lu\n", _msize(s));
#else
#endif
Für einen echten C-Array wie
AnyType myarray[] = {...};
oder
AnyType myarray[constVal];
siehe die andere Antwort.
Die Frage ist nicht sehr klar; Sie können die Array-Länge immer erhalten, wenn ihre Definition lokal ist ;-) – dirkgently
@dirkently, stimme ich zu, es ist unklar, ob sie nach einer Zeigerlänge oder Array-Länge fragen. Ich leitete sie zu Ihrer Antwort für das letztere um – JaredPar