GwenDragon+2008-01-09 15:50:59--
Vorsicht!
sizeof liefert vermutlich nicht das, was hier gesucht wurde.
Im Falle dieses Codes
size_t getSizeOf(char data[]) {
return sizeof(data);
}
ist unter C / C++ der Rückgabewert garantiert immer gleich, und zwar die Größe des Zeigers, der als Parameter übergeben wird; das ist in der Regel ein Maschinenwort von 4 oder 8 Bytes.
Dasselbe gilt natürlich auch für den äquivalenten Code
size_t getSizeOf(char *data) {
return sizeof(data);
}
Selbst im Falle dieses Codes
size_t getSizeOf(char data[42]) {
return sizeof(data);
}
sollte der Rückgabewert noch stets derselbe wie beim obigen sein.
Anders sieht es mit
size_t getSizeOf(void) {
char data[42];
return sizeof(data);
}
aus. Hier sollte stets
42 * sizeof(char) herauskommen.
Langer Rede kurzer Sinn: C / C++ speichert im Datentyp "Array" keinerlei Längeninformation und übergibt ihn als Parameter in der Regel per Referenz. Mit
sizeof kann nur dann die Länge eines Arrays bestimmt werden, wenn diese zur Kompilierzeit bekannt ist. Für alle anderen Fälle muss man die Längeninformation entweder durch Scannen (wie beispielsweise mit
strlen) ermitteln, oder in einer separaten Variable / einem Feld einer Struktur mitführen.
When C++ is your hammer, every problem looks like your thumb.