array subscript has type 'char'

Gast #3873186
Lesenswert?
• ▲
▼
Hallo,

auch wenn es nur eine Warnung ist,
"array subscript has type 'char'"

Wie bekomme ich das am besten weg.
1
const char array[256][9] PROGMEM={
2
  {0x08,0x7E,0x81,0xA9,0x8D,0x8D,0xA9,0x81,0x7E},  // 0x01
3
  {0x08,0x7E,0xFF,0xD7,0xF3,0xF3,0xD7,0xFF,0x7E},  // 0x02
4
  {0x08,0x70,0xF8,0xFC,0x7E,0xFC,0xF8,0x70,0x00},  // 0x03
5
};
6

7
uint16_t func(char *s)
8
{
9
  uint16_t width = 0;
10
  uint16_t i = 0;
11
  while(i < strlen(s))
12
  {
13
    width += (int16_t)pgm_read_byte(&array[s[i]][0]);
14
    i++;
15
  }
16
  return width + (i-1);
17
}
Gast #3873307
Lesenswert?
• ▲
▼
Was ich versucht habe ist
(Nur die geänderten Zeilen
1
const char array[256][9] PROGMEM={
2
width += pgm_read_byte(&font_bold[s[i]][0]);
array subscript has type 'char'
1
const unsigned char array[256][9] PROGMEM={
2
width += pgm_read_byte(&font_bold[s[i]][0]);
array subscript has type 'char'
1
const uint8_t array[256][9] PROGMEM={
2
width += pgm_read_byte(&font_bold[s[i]][0]);
array subscript has type 'char'
1
const uint8_t array[256][9] PROGMEM={
2
width += pgm_read_byte(&font_bold[(uint8_t)s[i]][0]); // Tipp Pitty
geht
1
const char array[256][9] PROGMEM={
2
width += pgm_read_byte(&font_bold[(uint8_t)s[i]][0]); // Tipp Pitty
geht
#3873345
Lesenswert?
• ▲
▼
Karl Heinz schrieb:
> Den ersten würde ich ja noch verstehen.
> Aber bei den restlichen bin ich ratlos. Die sollten meinem Dafürhalten
> nicht sein.

Warum, ist doch ziemlich eindeutig?
s[i] ist vom Typ char und wird als Array-Index verwendet, deshalb kommt 
die Meldung. Nur bei den letzten beiden castet er das nach uint8_t, und 
deshalb sind das die einzigen, wo die Warnung nicht kommt.
Gast #3873533
Lesenswert?
• ▲
▼
> Übersehe ich jetzt irgendwas? Solange er diese Zeile nicht ändert:
>
> Werner schrieb:
>> uint16_t func(char *s)
>
> ist s[i] doch immer vom Typ char, völlig unabhängig davon, wie das
> Array definiert ist.

So sehe ich das auch. Da muss der Funktionskopf angepasst werden. Oder 
richtig gecastet.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.