Forum: Mikrocontroller und Digitale Elektronik while-Bedingung bei String-ausgabe


von Florian S. (sirius7)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche gerade eine Art der Stringsübergabe nachzuvollziehen, komme 
jedoch nicht klar damit und verstehe nicht den Ausdruck.

und zwar:
_______
unsigned char str[31]="Alle Schalter in Nullposition!"
...
unsigned char i=0;

while(str[i]) putchar(str[i++]);
__________
putchar ist einfach Funktion UDR1=byte_to_send

aber, wie versteht man diesen while Ausdruck while(str[i])? i wird nicht 
einmal inkrementiert. Hat das was mit String - Determination /0 zu tun? 
Ich würde das übrigens so implementieren:

int i=0;
while(i<31)
   {
    putchar(str[i])
    i++;
   }

das komplette Code ist im Anhang.
Bitte um Ihre Hilfe

von Loddaar (Gast)


Lesenswert?

Alex S. schrieb:
> putchar(str[i++]);

da steht doch i++

von Georg G. (df2au)


Lesenswert?

Alex S. schrieb:
> Hat das was mit String - Determination /0 zu tun?

Genau so ist es.
Deine Variante wird zum Genickschuss, wenn du später mal die Stringlänge 
änderst und nicht aufpasst.

von mr. mo (Gast)


Lesenswert?

Alex S. schrieb:
> unsigned char i=0;
>
> while(str[i]) putchar(str[i++]);

Klar wird hier inkrementiert, dafür steht das "i++". Die while-Schleife 
läuft so lange bis str[i] ein '\0' enthält.

Alex S. schrieb:
> int i=0;
> while(i<31)
>    {putchar(str[i]
>     i++;
>     )

Die Implementierung ist in dem Fall nicht so gut, stell dir vor der 
String ändert seine Länge. Mit der while(str[i]) Lösung kannst du 
flexibel reagieren und ist eigentlich die typische Lösung bei so einem 
Problem.

Es muss halt nur sicher gestellt werden, dass der String mit '\0' 
terminiert wird.

von Florian S. (sirius7)


Lesenswert?

ok, habs verstanden)) vielen Dank für die Erklärung!

von DirkB (Gast)


Lesenswert?

Noch etwas anderes:

Für Zeichen nimmt man den Datentyp char.
Ob das signed oder unsigned ist, ist eine Einstellung vom Compiler.

Zum rechnen nimmt man explizit unsigned char bzw. signed char.

Für dein i ist unsigned char ok,
Für str ist char besser.

von Florian S. (sirius7)


Lesenswert?

DirkB schrieb:
> Noch etwas anderes:
>
> Für Zeichen nimmt man den Datentyp char.
> Ob das signed oder unsigned ist, ist eine Einstellung vom Compiler.
>
> Zum rechnen nimmt man explizit unsigned char bzw. signed char.
>
> Für dein i ist unsigned char ok,
> Für str ist char besser.

hallo Dirk vielen Dank für die Information!

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.