Forum: Compiler & IDEs Erklärung der Fehlermeldung


von Julius (Gast)


Lesenswert?

Hallo,

ich benutze die library von fleury und wollte jetzt etwas auf dem Diplay 
ausgeben, allerdings meckert er immer mit:
1
../test0005.c:43: warning: passing arg 1 of `lcd_puts' makes pointer from integer without a cast

Ich weiß nicht warum...


Hier noch der Programmschnipsel, den er bemeckert:
1
lcd_puts (counter);
2
counter++;
3
timer(250);

Das befindet sich in einer for-Schleif...

Mein Ziel ist es dass er einen Countdown macht, aber ich fange erstmal 
mit einem "Countup" an ;)

Kann mir jemand helfen?

Danke schon einmal

von TechInfo (Gast)


Lesenswert?

Ich gehe mal davon aus dass lcd_puts einen String bzw. einen Pointer auf 
char haben möchte. Deine Variable counter ist aber bestimmt vom Typ int.

von kosmonaut_pirx (Gast)


Lesenswert?

hallo,
ja.

schau dir bitte die deklaration von lcd_puts an. ich behaupte mal (kenne 
die selber nicht), das lcd_puts einen pointer erwartet. dein counter 
aber ein int (oder etwas verwandtes ist. dann gibst du ihm (dem 
compiler) eine zahl, die ja auch eine adresse bezeichnen kann. aber der 
compiler bezweifelt das (zu recht zumeist) an.

hth,
bye kosmo

von Georg (Gast)


Lesenswert?

1
void  lcd_puts (const char *s)

Wenn ich die int in char umwandle funktioniert es trotzdem nicht...

In was muss ich die int umwandeln?

von kosmonaut_pirx (Gast)


Lesenswert?

wieo in nen char?

da steht ein "char*", was ein pointer ist!

du willst die zahl auf das display ausgeben? dann kommst du um die 
umwandlung der zahl in einen string (char*) nicht drum rum.
bye kosmo

von TechInfo (Gast)


Lesenswert?

Und ein typecast reicht hier übrigens nicht aus, da du ja das 
entsprechende ASCII-Zeichen auf dem Display haben möchtest. Google mal 
nach itoa oder ähnlichem.

von Georg (Gast)


Lesenswert?

Warum reicht ein typcast nicht aus?

Das ASCII-Zeichen wird doch von der Funktion von Fleury erzeugt, ode 
rnicht?

von TechInfo (Gast)


Lesenswert?

Nö.

Die Funktion will einen String. Wenn du ihr z.B. den Wert 50 in einer 
char-Variablen gibst, zeigt er dir das ASCII-Zeichen Nr. 50 an. Das ist 
aber das Zeichen '2' und nicht die '50'.

Schau mal hier:

Beitrag "lib für Pollin LCD (WINTEK2704)"

von Georg (Gast)


Lesenswert?

Guter Link, aber ich verstehe das nicht ganz...

Warum nimmt er statt der Zahl 50, das dafür stehende Zeichen? Das z.B. 
verstehe ich nicht ganz...

Kann mir vielleicht jemand kurz posten wie das gehen soll, denn 
irgendwie stehe ich gerade mordsmäßig auf dem Schlauch...

von TechInfo (Gast)


Lesenswert?

Ich gehe mal davon aus, dass dein Display ASCII-Zeichen erwartet, 
genauso wie es Terminalprogramm am PC oder die Ausgabe im DOS-Fenster 
von Windows verlangt. Also mußt du ihm auch welche geben. Du mußt im 
Kopf unterscheiden zwischen "Zahlen" und "Zeichen". Wenn du das Zeichen 
für "50" ausgeben willst, damit 50 auf deinem Display erscheint, musst 
du ihm den entsprechenden ASCII-Wert liefern.

Die ASCII-Tabelle findest du überall im Netz. Da kannst du sehen welches 
Zeichen welche Nummer hat.

Ansonsten mußt du einfach deine Integer-Zahl mit einer Routine in ein 
ASCII-Zeichen umwandeln. Das macht z.B. itoa, wenn das deine Library 
anbietet.

von kosmonaut_pirx (Gast)


Lesenswert?

warum sollte er dir die zeichenfolge "50" ausgeben?

deine zahl ist eine zahl. ende, aus. das ist alles, was den rechner 
interessiert. die darstellung ist lediglich für unsereins interessant. 
visualisiert wird eine zahl durch ziffern. um beim beispiel zu bleiben: 
eine 5 und eine 0. das ist dann schon eine zeichenkette, ergo ein 
string. gibtst du dem rechner eine 50 als zeichenkette, versucht er 
selbstredend, das entsprechende zeichen/ziffer hinter der 50 auszugeben 
(character-encoding). willst du die zahl 50 mit ihren beiden ziffern als 
zeichenkette ausgeben, musst du das encoding für jede ziffer raussuchen 
und aneinander hängen (bei ascii also 0x35 und 0x30, iirc).

vll hilfts ja (ist doch alles logisch) g)
bye kosmo

von Georg (Gast)


Lesenswert?

ok danke.

Das heißt ich muss entweder für jede ziffer von 0 bis 9 die 
entsprechende ASCII Nummer herausfinden und dann der Funktion LCD puts 
geben oder ich benutze dieses itoa?

Wenn ja, dann wäre das mit dem itoa vermutlich viel eleganter, oder?

Könnte man mir vielleciht ein Beispiel für itoa geben?

Danke :)

von Stefan B. (stefan) Benutzerseite


Lesenswert?


von Georg (Gast)


Lesenswert?

1
char Buffer[20];
2
itoa( counter, Buffer, 10 );
3
lcd_clrscr ();
4
lcd_putc (Buffer);
5
timer(250);
6
counter++;

ergibt immernoch eine Fehlermeldung:
1
../test0005.c:46: warning: passing arg 1 of `lcd_putc' makes integer from pointer without a cast

von Joerg X. (Gast)


Lesenswert?

.. jetzt hast du "puts" und "putc" vertauscht: putc überträgt ein char 
(wie der Name suggeriert), outs überträgt ein Array (dt. Feld) von chars 
- einen string - bis zu dessen Ende (0, '\0').
Arrays werden in C als Pointer auf das 1. Element an Funktionen 
übergeben. (alles wirkliche C-Grundlagen!).

hth. Jörg

von Georg (Gast)


Lesenswert?

Ok, vielen Dank.

Das letzte war echt ein dummer Fehler -.- Sorry

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.