Array in Funktion übergeben --> falsche Länge erkannt

Gast #3332634
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.
#3332639
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren