Forum: Compiler & IDEs Ausdruck, Zeichen, Byte, Null: 0 != '\0' ?


von Nachtwunderer (Gast)


Lesenswert?

Wieso ist a) true ?
1
char string[8] = "";
2
const char array[] = 
3
a) {0}
4
b) {'\0'}
5
6
if( string[0] = pgm_read_byte(&array[0]) )
7
  // true
8
else
9
  // false

Quellcode ist ISO-xxx kodiert

von Uwe .. (uwegw)


Lesenswert?

Wenn du vergleichen willst, solltest du das mit == machen. Und array 
liegt nicht im Flash, nur weil es const ist. Es braucht noch das 
Attribut PROGMEM.

von Sven P. (Gast)


Lesenswert?

Weder a) noch b) sind TRUE, nur ist es kein Vergleich und pgm_read_byte 
ist falsch. Oder hast du PROGMEM vergessen?

von der mechatroniker (Gast)


Lesenswert?

Kann sein, dass ich mich irre, aber beim gcc bewirkt const allein nicht, 
dass die Daten im Flash landen. Daher liest du mit pgm_read_byte 
wahrscheinlich aus dem Nirvana. Der Datenmüll landet dann (wegen 
einfachem '=') in string[0] und ist mit einer Wahrscheinlichkeit von 
255/256 nicht null.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Weil das Array nicht da landet, wo Du annimst. Es als const zu 
deklarieren, genügt nicht, damit es im Flash-ROM abgelegt wird, Du musst 
zusätzlich PROGMEM angeben.

von JW (Gast)


Lesenswert?

Wieso sollte
1
const char array[] = ...
 im Flash stehen ?
Wieso sollte Lesen im Flash mit der Adresse einer SRAM Variable ein 
nicht-zufälliges Ergebnis liefern?

von Nachtwunderer (Gast)


Lesenswert?

Verzeihung. Bitte nochmal:
1
char string[8] = "";
2
const char array[] PROGMEM= 
3
a) {0}
4
b) {'\0'}
5
;
6
if( string[0] = pgm_read_byte(&array[0]) )
7
  // true
8
else
9
  // false

von if-men (Gast)


Lesenswert?

siehe 1.Antwort, 1.Satz!

= ist eine Zuweisung
== ist ein Vergleich

von Nachtwunderer (Gast)


Lesenswert?

Die Aussage ist korrekt, aber nicht der Grund.

Der Ausdruck string[0] = pgm_read_byte(&array[0]) hat den Wert 
pgm_read_byte(&array[0]) und sollte somit für die Bedingung wahr sein, 
wenn der Rückgabewert != 0 ist.
Nun ist ja eigentlich 0 == 0 == '\0'. Oder?

von Nachtwunderer (Gast)


Lesenswert?

> Die Aussage ist korrekt, aber nicht der Grund.
Nehme ich an. Liege ich falsch?

von Nachtwunderer (Gast)


Lesenswert?

Ursache: falsche (alte) Daten im Flash.

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.