sizeof(Buffer) geht nicht warum in C

#679952
Lesenswert?

Hallo alle zusammen


Ich habe eine funktion

int onl_send(char Buffer[])
{
  int v;
  lcd_print("Bin am Senden...",4,22,0,Schwarz,Gruen);

  if(Buffer[0]=='<')
  {
    lcd_print("Start zeichen Found",4,22,0,Schwarz,Gruen);
    for(v=0;sizeof(Buffer);v++)
    {
      stdout = &mystdout;
          printf("%c",Buffer[v]);
    }
  }
  else
  {
    lcd_print("Kein Start zeichen",4,22,0,Schwarz,Gruen);
    getkey();
    menue();
  }
    return(0);
}

Buffer wird vorher eingelesen und an diese funktion übergeben.
wieso funktioniert diese Ausgabe funktion nicht? wenn ich als Abbruch 
bedienung das letzte zeichen rein schreibe was im buffer steht z.b.

for(v=0;Buffer[v]!='>';v++)

Dann gibt er mir alle zeichen aus die vor dem '>' stehen. Ich möchte 
aber dass alle zeichen ausgegeben werden.

Hoffe das jemand damit schon erfahrungen gesamelt hat und mir helfen 
kann.
Gast #679995
Lesenswert?

woher soll der Compiler denn wissen wie gross dein Buffer ist wenn der 
als char[] deklariert ist? Also entweder die Grösse beim Funktionsaufruf 
mitgeben oder als Endebedingung z.B. auf Zeichen '0' testen (das muss 
dann vorher natürlich auch in den Buffer reingeschrieben werden).
Gast #680044
Lesenswert?

> Und wenn ich den Buffer doch von einer anderen Funktion übergebe wird
> die grösse dann nciht vom copiler festgelegt?

Man kann generell keine Arrays als Funktionsparameter definieren. Buffer 
ist in deinem Code ein Zeiger auf char, und sizeof wird dir daher die 
Größe eines Zeigers auf char geben.
#680056
Lesenswert?

Christian (Guest) wrote:
> char a[10];

Achtung Achtung

====> sizeof(a);    // liefert 10

> sizeof(a[3]); // liefert 1


und wenn ich a übergebe dann Kriege ich nicht mehr 10 zurück?

Aber stimmt alles was ihr mir geschrieben habt

Vielen dank mir wurde sehr geholfen
Gast #680074
Lesenswert?

> und wenn ich a übergebe dann Kriege ich nicht mehr 10 zurück?

Du kannst a nicht übergeben. Nochmal: In der Funktion hast du nur noch 
einen Zeiger, der auf den ersten char deines Arrays zeigt. Ein sizeof 
gibt die Größe dieses Zeigers zurück, die natürlich nichts mehr mit der 
Größe des Arrays zu tun hat.

> dEIN aRRAY IST [] = [0]

Nein.

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