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
|
Forum: Compiler & IDEs Ausdruck, Zeichen, Byte, Null: 0 != '\0' ?Wieso ist a) true ?
Quellcode ist ISO-xxx kodiert 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. Weder a) noch b) sind TRUE, nur ist es kein Vergleich und pgm_read_byte ist falsch. Oder hast du PROGMEM vergessen? 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. 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. Wieso sollte
im Flash stehen ? Wieso sollte Lesen im Flash mit der Adresse einer SRAM Variable ein nicht-zufälliges Ergebnis liefern? Verzeihung. Bitte nochmal:
siehe 1.Antwort, 1.Satz! = ist eine Zuweisung == ist ein Vergleich 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? > Die Aussage ist korrekt, aber nicht der Grund.
Nehme ich an. Liege ich falsch?
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.
|
|