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.
1 | for(v=0;sizeof(Buffer);v++) |
Und wo ist da die Abbruchbedingung? sizeof(Buffer) ist immer "wahr". Würde mal
1 | for(v=0;v<sizeof(Buffer);v++) |
probieren. Gruß Markus
ja habe mich verschrieben war ja auch so sorry aber danke für die schnelle antwort.. das ist meine abbruchbedingung v<sizeof(Buffer);
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).
Achso Und wenn ich den Buffer doch von einer anderen Funktion übergebe wird die grösse dann nciht vom copiler festgelegt?
> 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.
@ Der Grosse Obacht: Du übergibst nur einen Zeiger auf den Datenbereich, nicht den Datenbereich selber! Siehe: Frage 2.4: Warum sind dann Array- und Zeigerdeklarartionen als formale Parameter einer Funktion austauschbar? http://www.dclc-faq.de/kap2.htm
char a[10]; sizeof(a); // liefert 10 sizeof(a[3]); // liefert 1 aus http://de.wikibooks.org/wiki/C-Programmierung:_Ausdr%C3%BCcke_und_Operatoren#Speichergr.C3.B6.C3.9Fe_sizeof und a[0] ? Nach meiner kenntnis ist: a[] = a[0]
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
Sory, link: http://home.fhtw-berlin.de/~junghans/cref/EXAMPLES/sizeof1.c Das bEISPIEL IST PASSEND dEIN aRRAY IST [] = [0]
> 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.
Lösungsvorschlag: Da Du ja eh einen String übergibst (der mit Null Terminiert ist) einfach so:
1 | for(v=0; '\0' != buffer[v]; v++) |
Übrigens: Statt ein verhältnismäßig riesiges
1 | printf("%c",Buffer[v]); |
auf ein einzelnes Zeichen loszulassen, würde es auch ein
1 | putchar(Buffer[v]); |
tun.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.