Forum: Mikrocontroller und Digitale Elektronik Array in Funktion übergeben --> falsche Länge erkannt


von brechbunkt (Gast)


Lesenswert?

Hallo,

an meiner 32bit CPU habe ich eine Funktion, der ich eigentlich die 
Adresse eines Arrays übergeben wollte. Das schaut dann so aus:
1
int uartRead(char rxBuf[])
2
{ 
3
...
4
    memset(rxBuf, 0, sizeof(rxBuf));
5
...
6
}


Nun stelle ich allerdings fest, dass die Funktion glaubt, dieser Array 
hätte nur eine Länge (sizeof()) von 4 Byte. Bei einem Zeiger ist mir 
schon klar, dass die Funktion nicht wissen kann, wie lang das Datenfeld 
ist. Bei einem Array dachte ich allerdings schon, dass das gehe würde.
Kann mir jemand sagen warum das schief läuft? Schließlich ist die Länge 
des Array schon während der Compilierung bekannt.

von Karl H. (kbuchegg)


Lesenswert?

brechbunkt schrieb:
> Hallo,
>
> an meiner 32bit CPU habe ich eine Funktion, der ich eigentlich die
> Adresse eines Arrays übergeben wollte.

Eben. Du übergibst die Adresse des Arrays.

>
1
int uartRead(char rxBuf[])
2
> {
3
> ...
4
>     memset(rxBuf, 0, sizeof(rxBuf));
5
> ...
6
> }

Du kannst an dieser Stelle kein sizeof verwenden. sizeof liefert dir 
hier die Größe des Pointers, der da in Wirklichkeit übergeben wird, auch 
wenn die Syntax etwas anderes suggeriert.

Übergib der Funktion die Länge als 2-ten Parameter und alles ist gut. 
Innerhalb der Funktion kann man die Größe des Arrays vom Aufrufer 
prinzipiell nicht feststellen.


> Kann mir jemand sagen warum das schief läuft?
Weil das hier
>
1
int uartRead(char rxBuf[])
2
>
nichts anderes als eine syntaktische Augenauswischerei für
1
int uartRead(char * rxBuf)

ist. Da steckt nicht mehr dahinter. Insbesondere nicht das, was du 
dahinter vermutest.

: Bearbeitet durch User
von Vn N. (wefwef_s)


Lesenswert?

C Buch durcharbeiten. Auch außerhalb der Funktion wirst du auf diese Art 
die Länge des Arrays nicht feststellen können (nur, bevor du es 
probierst).

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.