Erklärung der Fehlermeldung

Gast #576080
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
Gast #576093
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
Gast #576107
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
Gast #576142
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...
Gast #576163
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.
Gast #576165
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
Gast #576166
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 :)
Gast #576186
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
Gast #576193
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

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.