mikrocontroller.net

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


Autor: Nachtwunderer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso ist a) true ?
char string[8] = "";
const char array[] = 
a) {0}
b) {'\0'}

if( string[0] = pgm_read_byte(&array[0]) )
  // true
else
  // false

Quellcode ist ISO-xxx kodiert

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven P. (haku) Benutzerseite
Datum:

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

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: JW (Gast)
Datum:

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

Autor: Nachtwunderer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verzeihung. Bitte nochmal:
char string[8] = "";
const char array[] PROGMEM= 
a) {0}
b) {'\0'}
;
if( string[0] = pgm_read_byte(&array[0]) )
  // true
else
  // false

Autor: if-men (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
siehe 1.Antwort, 1.Satz!

= ist eine Zuweisung
== ist ein Vergleich

Autor: Nachtwunderer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Nachtwunderer (Gast)
Datum:

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

Autor: Nachtwunderer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ursache: falsche (alte) Daten im Flash.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.