Thread Länge eines Char-Vektors (6 answers)
Opened by pktm at 2008-01-09 13:59

murphy
 2008-01-10 05:04
#104565 #104565
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
GwenDragon+2008-01-09 15:50:59--
[...]
Größe: sizeof
[...]


Vorsicht! sizeof liefert vermutlich nicht das, was hier gesucht wurde.

Im Falle dieses Codes
Code: (dl )
1
2
3
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
Code: (dl )
1
2
3
size_t getSizeOf(char *data) {
return sizeof(data);
}


Selbst im Falle dieses Codes
Code: (dl )
1
2
3
size_t getSizeOf(char data[42]) {
return sizeof(data);
}

sollte der Rückgabewert noch stets derselbe wie beim obigen sein.

Anders sieht es mit
Code: (dl )
1
2
3
4
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.

View full thread Länge eines Char-Vektors