> Der Pointer im Unterprogramm zeigt irgendwo hin.
Nö, der an Deine Funktion übergebene Pointer zeigt dahin, wo er soll.
> Deswegen liefert sizeof() auch zB 2 anstatt 3.
sizeof liefert die Größe des übergebenen Pointers, und der ist auf einem
16-Bit-System nunmal 2 Bytes groß.
Das ist also korrekt.
Daß der Pointer auf ein Array mit n Elementen zeigt, das ist in Deiner
Funktion nicht bekannt, und die Anzahl der Elemente lässt sich so auch
nicht mit sizeof bestimmen.
Wenn buffer ein String (eine Zeichenkette) sein soll, dann lässt sich
die Stringlänge mit der C-Runtime-Funktion strlen bestimmen.
In Deinem Beispiel aber ist das Array test kein String, da es nicht
mit Null terminiert ist (und außerdem mehrere nicht darstellbare Zeichen
enthält).
Deiner Funktion musst Du beim Aufruf neben dem Pointer auf das Array
auch dessen Größe mitteilen:
1 | int8_t unterprogramm(char* buffer, int size)
|
2 | {
|
3 | return size;
|
4 | }
|
5 |
|
6 | int main(void)
|
7 | {
|
8 | int8_t u;
|
9 | char test[] = {0x0E,0x02,0x21};
|
10 | u = unterprogramm(test, sizeof (test));
|
11 | .
|
12 | .
|
13 | .
|
14 | }
|
Damit gewinnt allerdings das Beispiel an Sinnlosigkeit (warum einer
Funktion, die anscheinend die Länge eines Arrays bestimmen soll,
dessen Länge mitteilen?).
Abschließend:
Das Schlüsselwort extern ist hier vollkommen fehl am Platze.