Hi Lothar! Lothar Behrens schrieb am 01.08.2004 10:48 :
Das geht vielleicht, aber was ist, wenn lo >= 255 ist ?
Die Frage stellte sich mir nicht, weil Jan dies hier schrieb:
Von der größe der Zahl ist es dann kein problem mehr...!
Ich hatte daher nur beantwortet, wie man ein long nach char castet. Und meine beiden Lösungen sind meiner Meinung nach korrekt (in ANSI-C++). - Bis mir jemand das Gegenteil beweist.
ich würde das so machen:
char buf[sizeof(long)];
sprintf(buf, "%l", lo);
Das ist wohl die eleganteste Lösung für Jans Gesamtproblem. Gruß, Michael
* Michael Wenger
ich würde das so machen:
char buf[sizeof(long)];
sprintf(buf, "%l", lo);
Das ist wohl die eleganteste Lösung für Jans Gesamtproblem.
Damit wird aber an buf[ sizeof(long) ] (also außerhalb des gültigen Speichers) eine 0 geschrieben. Richtig wäre also char buf[sizeof(long)+1]; sprintf(buf, "%l", lo); Gruß, Bernhard --
Hallo, Am Mon, 02 Aug 2004, Bernhard Walle schrieb:
* Michael Wenger
[2004-08-02 02:40]: ich würde das so machen:
char buf[sizeof(long)];
sprintf(buf, "%l", lo);
Das ist wohl die eleganteste Lösung für Jans Gesamtproblem.
Damit wird aber an buf[ sizeof(long) ] (also außerhalb des gültigen Speichers) eine 0 geschrieben. Richtig wäre also
char buf[sizeof(long)+1]; sprintf(buf, "%l", lo);
Nein.
====
#include
* David Haller
Am Mon, 02 Aug 2004, Bernhard Walle schrieb:
* Michael Wenger
[2004-08-02 02:40]: ich würde das so machen:
char buf[sizeof(long)];
sprintf(buf, "%l", lo);
Das ist wohl die eleganteste Lösung für Jans Gesamtproblem.
Damit wird aber an buf[ sizeof(long) ] (also außerhalb des gültigen Speichers) eine 0 geschrieben. Richtig wäre also
char buf[sizeof(long)+1]; sprintf(buf, "%l", lo);
Nein.
==== #include
#include int main(void) { char buf[1024]; long lo = LONG_MAX; sprintf(buf, "%li", lo); printf("%s, %i, %i\n", buf, strlen(buf), sizeof(long)); return 0; } ==== $ ./a.out 2147483647, 10, 4
Merkt ihr was?
Natürlich. Kommt davon, wenn man im Fehler einen Fehler sieht und den eigentlichen Fehler dann übersieht ;) Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ Eine Investition in Wissen bringt noch immer die besten Zinsen. -- Benjamin Franklin
Speichers) eine 0 geschrieben. Richtig wäre also
char buf[sizeof(long)+1]; sprintf(buf, "%l", lo);
Nein.
==== #include
#include int main(void) { char buf[1024]; long lo = LONG_MAX; sprintf(buf, "%li", lo); printf("%s, %i, %i\n", buf, strlen(buf), sizeof(long)); return 0; } ==== $ ./a.out 2147483647, 10, 4
Merkt ihr was?
Natürlich. Kommt davon, wenn man im Fehler einen Fehler sieht und den eigentlichen Fehler dann übersieht ;)
Hmm, das macht den Unterschied von einem C und C++ Programmierer aus :-) Gut zu wissen. (2er/10er/Hex System und deren Platzverbrauch in der Darstellung) Lothar ---- My home: www.lollisoft.de ----------------------------- Lothar Behrens | Independent: lothar.behrens@gmx.de Rosmarinstr 3 | My public project: 40235 Düsseldorf | http://sourceforge.net/projects/lbdmf | -> Need comments, please visit :-)
participants (4)
-
Bernhard Walle
-
David Haller
-
Lothar Behrens
-
Michael Wenger