Forum: PC-Programmierung Integer* zu const char*


von Manni (Gast)


Lesenswert?

Guten morgen,
ich möchte eine Variable vom Typ Integer* zum Typ const char* wandeln 
(in C):
1
int var=500;
2
int *ptrVar=&var;
3
4
displayValue("Wert der Variable:\n");
5
displayValue((const char*)ptrVar);

Die Funktion displayValue erwartet, wie zu sehen ist, einen const char*.
Der Compiler verarbeitet es auch, allerdings wird durch die Funktion nur 
"Wert der Variable:\n" ausgegeben und der Rest fällt unter den Tisch.
Kann man Ints nicht einfach casten?

Viele Grüße

von HB (Gast)


Lesenswert?

du musst die string.h bemühen müssen.
sprintf("

int var=500;
char myString[50];

sprintf(myString, "Wert der Variable:%i\n",var);
displayValue(myString);

von abc (Gast)


Lesenswert?

Aua. Murks.

500 passt nicht in einen char und diese ganze "Casterei" zeugt von 
tiefem Nicht- bzw Unverständnis. Deine Funktion will ein 
char-Array=einen String, deshalb const char*. Um eine Zahl auszugeben 
muss diese mit sprintf oder irgendwas handlicherem in einen String 
umgewandelt werden, mit irgendwelchen casts wird das nichts.

Buchtipp: 
http://www.amazon.de/Programming-Language-Prentice-Hall-Software/dp/0131103628/ref=sr_1_1?ie=UTF8&qid=1310455365&sr=8-1

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Funktion "displayValue" gibt eine Zeichenkette aus.

Damit Dein Wert in lesbarer Form ausgegeben werden kann, musst Du ihn in 
eine Zeichenkette umwandeln. Ein Typecast aber macht das nicht.

Dein Versuch geht in die Hose, weil das, worauf ptrVar zeigt, keine 
Zeichenkette ist. Zeichenketten sind nullterminiert, Deine per Typecast 
erzeugte Quasizeichenkette aber besteht aus zwei Bytes (500dez = 0x1f4 = 
0x01 0xF4) ... und hört mit der nächsten zufällig irgendwo im Speicher 
gefundenen Null auf.


Um eine Zahl in eine Zeichenkette umzuwandeln, kannst Du beispielsweise 
sprintf oder itoa verwenden.

von Manni (Gast)


Lesenswert?

Das hatte ich vergessen zu sagen.. Sorry!
Die Ausgabe erfolgt auf einem Display eines uCs, desswegen möchte ich 
von scanf abstand nehmen.

Viele Grüße

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Manni schrieb:
> Die Ausgabe erfolgt auf einem Display eines uCs, desswegen möchte ich
> von scanf abstand nehmen.

Von scanf war auch nie die Rede. Du meinst wohl eher printf. Dann 
nimm halt itoa.

Im übrigen ist der Funktionsname displayValue ziemlich bescheuert - 
weil er nicht zutrifft. Diese Funktion stellt keinen Wert dar, sondern 
eine Zeichenkette. Also beliebige Texte.

von Manni (Gast)


Lesenswert?

Besten Dank,
das funktioniert!


Viele Grüße

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.