Forum: PC-Programmierung Array Name/Pos in Funktion zerlegen


von Martin D. (martin_d69) Benutzerseite


Lesenswert?

Hallo,

ich bin was Pointer an geht noch nicht fit!
Daher bitte ich euch, sagt mir was hier flasch läuft:
1
void PrintTemplate(unsigned char lcd_row, unsigned char *template_name, unsigned char template_pos) {
2
  Lcd_Out(lcd_row, 1, ArrayToText(template_name[template_pos-1]));
3
}
4
5
const char *array[] = {"Zeig mir was an",...usw...}
6
PrintTemplate(1, array, 1);

Danke schonmal

von DirkB (Gast)


Lesenswert?

Lcd_Out und ArrayToText sind nicht gerade die typischen Funktionen beim 
PC.
Keine Ahnung, wie die deklariert sind.

Aber array ist ein char**
PrintTemplate erwartet aber ein unsigned char*
Das ist etwas anderes.

template_name[template_pos-1] ist auch nur ein Zeichen (unsigned char)

von Martin D. (martin_d69) Benutzerseite


Lesenswert?

DirkB schrieb:
> Lcd_Out und ArrayToText sind nicht gerade die typischen Funktionen

Ich habe ArrayToText mal umbenannt weil mir der name zu doof war!
1
char ArrayToString(const char *array) {
2
  unsigned char i;
3
  static char chr[20];  // digits of the LCD
4
  for(i = 0; chr[i] = array[i]; i++) {}
5
  return chr;  // returns a single Array
6
}
7
void Lcd_Out(char row, char column, char *text);

So habe ich diese deklariert!
Ich verstehe was du meinst aber nicht wie ich es umsetzen soll...

Magst du mir ein Beispiel zeigen?

: Bearbeitet durch User
von DirkB (Gast)


Lesenswert?

1
void PrintTemplate(unsigned char lcd_row, unsigned char **template_name, unsigned char template_pos) {
2
  Lcd_Out(lcd_row, 1, ArrayToText(template_name[template_pos-1]));
3
}

Aus Neugier: Wozu brauchst du die Funktionen PrintTemplate und wozu 
dient ArrayToText?

von Martin D. (martin_d69) Benutzerseite


Lesenswert?

DirkB schrieb:
> void PrintTemplate(unsigned char lcd_row, unsigned char **template_name,...

Ich werd verrückt, das klappt genau wie ich das wollte!!!!!!
Warum muss ich da 2x den pointer setzten?
Danke Dirk

DirkB schrieb:
> Wozu brauchst du die Funktionen PrintTemplate und wozu
> dient ArrayToText?

Um ein Template auf ein LCD zu schreiben.
Später werden nur noch die Lücken gefüllt.

ArrayToText macht aus meinem *char array ein char String um es auf das 
LCD zu schreiben.
Kann sein das man direkt das *char array da rauf bekommt, mir gelingt 
das aber nicht.

: Bearbeitet durch User
von DirkB (Gast)


Lesenswert?

Martin D. schrieb:
> Warum muss ich da 2x den pointer setzten?

Darum:
DirkB schrieb:
> Aber array ist ein char**

Du hast ein Array von Zeigern. Ein * kommt durch das Array, der andere 
durch die Zeiger.

1
Lcd_Out(lcd_row, 1, template_name[template_pos-1]);
statt dem PrintTemplate geht nicht?

von Martin D. (martin_d69) Benutzerseite


Lesenswert?

DirkB schrieb:
> Martin D. schrieb:
>> Warum muss ich da 2x den pointer setzten?
>
> Darum:
> DirkB schrieb:
>> Aber array ist ein char**
>
> Du hast ein Array von Zeigern. Ein * kommt durch das Array, der andere
> durch die Zeiger.

Alles klar, habe ich jetzt verstanden! Danke für die Erklärung

> Lcd_Out(lcd_row, 1, template_name[template_pos-1]);statt dem
> PrintTemplate geht nicht?

Doch natürlich, ich bin ja noch lange nicht fertig und die Funktion wird 
noch gefüllt.
So währe es ja mehr Code als nötig.

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.