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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.