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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren