SPrintf, bitte um Eure hilfe!
-
Hallo,
Ich soll demnächst einen kleinen Vortrag über sprintf halten.
Wir verwenden Ansi C um Microcontroler zu programmieren (80C535)Nun wollte ich mal hier mein Info-Blatt posten.
Könntet jemand das mal lesen und dann verbesserungen oder ergänzungen liefern?
Ich bedanke mich schon mal an dieser Stelle.Mit sprintf() kann man Parameter (args) nach einem bestimmten Muster (format)
formatieren lassen. Im Gegensatz zu printf() wird der String nicht sofort
ausgegeben, sondern kann in einer Variablen gespeichert werden.
Sprintf() verwendet dabei zum Teil die gleichen Argumente wie printf()sprintf(“%X0.0YZ)
Der Musterstring format enthält Platzhalter, die mit einem Prozentzeichen
eingeleitet werden. Die Funktion ersetzt diese Platzhalter durch die entsprechend
formatierten Werte aus den nächsten Parametern. Die Platzhalter bestehen aus
folgenden Elementen:
X = Anzahl der Zeichen vor dem Dezimalkomma
. = Das Komma
Y = Anzahl der Zeichen nach dem Komma
0 = Wenn angegeben auffüllen mit Nullen
Z = Art der Darstellung
Angegeben werden müssen nur % und ZErlaubte Werte für Z:
%b Bitfolge
%c ASCII-Zeichen (wie chr() auch)
%s Ein anderer String
%d Dezimal-Integer mit Vorzeichen
%u Dezimal-Integer ohne Vorzeichen
%o Oktal-Integer ohne Vorzeichen
%x Hexadezimalzahl
%e Kommazahl in wissenschaftl. Format
%f Kommazahl
%g Kommazahl in %e oder %f (je nach Größe)Beispielprogramm:
#include <stdio.h>
sprintf (string,"%05.2f", 2.54876);
printf(„%s“,string)
Ausgabe: 00002.54
-
ich vermisse den *
http://en.wikipedia.org/wiki/Printf#printf_format_placeholders
-
N0bbz schrieb:
Ich soll demnächst einen kleinen Vortrag über sprintf halten.
Wir verwenden Ansi C um Microcontroler zu programmieren (80C535)und erwähne in deinem vortrag auch noch, dass man bei kleinen microcontrollern, wenn möglich, auf sprintf u.ä. verzichten sollte, weil diese funktionen verdammt fett sind und dementsprechend der codespeicher schnell voll ist.
-
+fricky schrieb:
und erwähne in deinem vortrag auch noch, dass man bei kleinen microcontrollern, wenn möglich, auf sprintf u.ä. verzichten sollte, weil diese funktionen verdammt fett sind und dementsprechend der codespeicher schnell voll ist.
Voll? Soweit ich sehe, hat der nur 256 Bytes on Chip, was will man da sprintf()en? "hello" vielleicht noch, bei ["hello world! %d", irgendeinint] kippt das Ding um. Als schauriges 8051- Derivat kann dem nichtmal einfachst abgeholfen werden. Auf'm PC x86, als Controller x51, Intel sei Dank, ojeh.
-
pointercrash() schrieb:
Voll? Soweit ich sehe, hat der nur 256 Bytes on Chip, was will man da sprintf()en?
ich meine ja den programmspeicher (flash, prom oder sowas). allzu viel RAM wird sprintf ja nicht brauchen, aber diese ganze parserei der formatstrings macht sprintf und kollegen zu echten schwergewichten. naja, wenn er glück hat, bietet seine c-library ein abgespecktes sprintf an.
-
+fricky schrieb:
ich meine ja den programmspeicher (flash, prom oder sowas). allzu viel RAM wird sprintf ja nicht brauchen, aber diese ganze parserei der formatstrings macht sprintf und kollegen zu echten schwergewichten. naja, wenn er glück hat, bietet seine c-library ein abgespecktes sprintf an.
Nene, guckst Du: Das Ding ist ROMless, soweit ich mich erinnere, gehen da 64 kB ROM oder ROM- Emulator problemlos dran. Das ist kein Drama.
Ich meine schon das RAM. Also ein paar Byte Luft will die C- Runtime für sich "mal so" haben, dito die Formatstringauswertung, dazu kommt noch die Konvertierung Dezimale->String, weiß nicht, wie tief der Aufruf sitzt, aber ein bißchen was brauchen Returnstack und offene Frames dann doch. Wie lang darf dann der Ergebnisstring denn noch sein? Du merkst, die Frage könnte spannend werden.Allenfalls gibt es Extended RAM und Keil C dürfte das seamless bedienen können (das letzte 51er- Ding hab' ich vor 13 Jahren abgelegt, bin also echt nimmer sattelfest), aber dann wird's sowieso schnarchlahm.
-
Vielen dank für eure Schnelle Antworten.
Hab mir den Link von Wiki zum Punkt * durchgelesen aber verstanden habe ich nur bahnhof.
-
N0bbz schrieb:
Vielen dank für eure Schnelle Antworten.
Hab mir den Link von Wiki zum Punkt * durchgelesen aber verstanden habe ich nur bahnhof.
Liegts am Englisch? http://dict.leo.org
Auf das Beispiel bezogen heißt das, daß die "10" mit drei Leerzeichen ausgegeben wird (to pad = auffüllen). Du kannst mit dem Sternchen angeben, wieviel Zeichen mindestens ausgegeben werden sollen (z.B. für tabellarische Listen).
-
unter anderem 3ag es auch am englisch^^
-
N0bbz schrieb:
unter anderem 3ag es auch am englisch^^
Englisch ist immens wichtig, wenn du C lernen willst. Das Fachenglisch, dass du da brauchst, ist aber nicht so umfangreich und auch nicht so schwer. Schlag einfach eine Weile jedes unbekannte Wort nach, dann hast du das sicher schnell drauf.
-
Danke für eure Hilfe und eure Tipps! Das ist mal hier ein richtig gutes Forum!
-
Danke für eure Hilfe und eure Tipps! Das ist mal hier ein richtig gutes Forum!
Jap, dass sagen sie alle wenn man ihnen Code vor die Nase packt
.
-
way schrieb:
Danke für eure Hilfe und eure Tipps! Das ist mal hier ein richtig gutes Forum!
Jap, dass sagen sie alle wenn man ihnen Code vor die Nase packt
.
Hast du den Thread überhaupt gelesen??