Wie bekomme ich zuverlässig die Größe eines C-artigen Arrays? Das Verfahren scheint oft empfohlen zu werden sizeof
zu verwenden, aber es funktioniert nicht in der foo
Funktion, wo x
in geben wird:Wie wird die Größe eines C-artigen Arrays zuverlässig ermittelt?
#include <iostream>
void foo(int x[]) {
std::cerr << (sizeof(x)/sizeof(int)); // 2
}
int main(){
int x[] = {1,2,3,4,5};
std::cerr << (sizeof(x)/sizeof(int)); // 5
foo(x);
return 0;
}
Antworten auf this question empfehlen sizeof
aber sie sagen nicht, dass es (anscheinend ?) funktioniert nicht, wenn Sie das Array übergeben. Muss ich stattdessen einen Sentinel benutzen? (Ich glaube nicht, die Benutzer meiner foo
Funktion kann immer ein Wächter am Ende zu setzen trauen. Natürlich, ich std::vector
verwenden könnte, aber dann bekomme ich nicht die schöne Stenografie Syntax {1,2,3,4,5}
.)
http://stackoverflow.com/questions/1810083/c-pointers-pointing-to-an-array-of-fixed-size – AnT
Wenn die Benutzer Ihrer Funktion nicht tun, was die Dokumente ihnen sagen, zu tun, ist ihr Problem ist nicht dein. Es ist unmöglich zu verhindern, dass die Ahnungslosen eine API missbrauchen. –
'x' in' foo' ist ein Zeiger und kein Array. Siehe http://stackoverflow.com/questions/232691/how-can-i-get-the-size-of-an-array-from-a-pointer-in-c, http://stackoverflow.com/questions/1975128/sizeof-array-in-der-c-Programmiersprache. Auch, dup: http://stackoverflow.com/questions/37538/c-how-do-i-determine-the-size-of-my-array – outis