Zeichenkette ausgeben

Gast #2648765
Lesenswert?

const static char array[] PROGMEM = "0123456789";
char buffer;
static char help[100];
buffer = array[7];
sprintf_P(help,PSTR(" %d \n") buffer);
uart1_puts(help);


Hallo Leute,

ich sehe glaube ich vor lauter Bäumen den Wald nicht mehr.
In dem kurzen Quellcode oben versuche ich das siebte Element des Arrays 
auszugeben. Leider habe ich keinen erfolg. Sieht jemand den fehler?
Danke schonmal für eure Hilfe
Gast #2648771
Lesenswert?

Günther schrieb:

> uart1_puts(help);

> const static char array[] PROGMEM = "0123456789";
> char buffer;
> buffer = array[7];
das kann schon mal nicht gehen

> sprintf_P(help,PSTR(" %d \n") buffer);
hier fehlt doch erstmal ein , oder nicht?

%d erwartet eine zahl - du übergibst aber ein zeichen.
Gast #2648786
Lesenswert?

Ich sag es ja der Wald :-)
Danke

Funktioniert jetzt bis auf einen schönheitsfehler.

 sprintf_P(help,PSTR("%x \r\n"),buffer);

diese zeile gibt mir richtig den hex wert aus.
Aber ich will den dezimalwert, da dachte ich immer %d oder %i wäre das 
richtige. da kommt allerdings Mist raus
#2648794
Lesenswert?

Günther schrieb:
> Ich sag es ja der Wald :-)
> Danke
>
> Funktioniert jetzt bis auf einen schönheitsfehler.
>
>  sprintf_P(help,PSTR("%x \r\n"),buffer);
>
> diese zeile gibt mir richtig den hex wert aus.
> Aber ich will den dezimalwert, da dachte ich immer %d oder %i wäre das
> richtige. da kommt allerdings Mist raus

sprintf docu zu raten ziehen? müsste ich jetzt auch machen...
Gast #2648795
Lesenswert?

Günther schrieb:
> diese zeile gibt mir richtig den hex wert aus.
> Aber ich will den dezimalwert, da dachte ich immer %d oder %i wäre das
> richtige. da kommt allerdings Mist raus

du hast doch überhaupt keine zahl, du musst nichts umwandeln! Du hast 
schon einen String oder zumindest ein zeichen.

Wenn du unbedingt printf nutzen willst dann so:

sprintf_P(help,PSTR("%c \r\n"),buffer);
Gast #2648848
Lesenswert?

So, leider ahbe ich noch eine weitere Frage.

Natürlich will ich mehrere Arrays anlegen.


     buffer= pgm_read_byte(&array[4]);
     sprintf_P(help,PSTR("%c \r\n"),buffer);
das funktioniert 1A.

So jetzt MUSS ich dieses Programm erweitern. es wird:
array0,array1,...array10000 geben.

und jetzt will ich nicht 10000mal      buffer= pgm_read_byte(&array[4]);
schreiben.
habe ich da eine möglichkeit das abzukürzen?
#2648857
Lesenswert?

Günther schrieb:
> So, leider ahbe ich noch eine weitere Frage.
>
> Natürlich will ich mehrere Arrays anlegen.
>
>
>      buffer= pgm_read_byte(&array[4]);
>      sprintf_P(help,PSTR("%c \r\n"),buffer);
> das funktioniert 1A.
>
> So jetzt MUSS ich dieses Programm erweitern. es wird:
> array0,array1,...array10000 geben.

Warum willst du das?
Was steht in den anderen Arrays denn so drinnen?

Wie unterscheidest du denn, welches der 1000 Arrays das Richtige ist?
Gast #2648866
Lesenswert?

Also da stehen nur zeichen drin. und über eine eingabe über rs232 will 
ich ein bestimmtes zeichen (a) der  zeichenkette ausgeben. z.B. 
array773z4. und dann soll
buffer= pgm_read_byte(&array773[4]);
ausgeführt werden.
Die eingabe steht.
Ich habe die 773 in einer Variablen und die 4 in einer variabelen.
nur kann ich das nicht zusammenfügen zu einem Befehl
#2648876
Lesenswert?

Günther schrieb:
> Also da stehen nur zeichen drin. und über eine eingabe über rs232 will
> ich ein bestimmtes zeichen (a) der  zeichenkette ausgeben. z.B.
> array773z4. und dann soll
> buffer= pgm_read_byte(&array773[4]);
> ausgeführt werden.
> Die eingabe steht.
> Ich habe die 773 in einer Variablen und die 4 in einer variabelen.
> nur kann ich das nicht zusammenfügen zu einem Befehl

Aber du kannst die 774 genauso wie die 4 als Index in ein und dasselbe 
Array auffassen. Du hast dann halt ein 2-dimensionales Array anstatt 
vieler 1-dimensionaler.

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