[solved] printf in Zeichenkette
-
Hallo,
ich möchte folgendes statt auszugeben in eine Variable kopieren:
printf(" | Sensor%d=%.1f°C;%1f;%1f;0,100.0", t->index +1, v->data, warning, critical)
Da dieses in einer Schleife läuft, muß ich die Variable in die die Ausgabe kopiert wird verketten.
Wie stell ich das am Besten an?
sorry newbie, ich hoffe ich habe mich klar ausgedrücktthx vicodas
-
Schau dir doch mal sprintf() an, das schickt die Ausgabe schonmal in ein char-Array anstelle des Bildschirms. mehrere dieser Arrays kannst du dann per strcat() zusammenfügen (genug Speicher vorausgesetzt).
-
Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Danke für die schnelle Hilfe, sprintf ist genau das Richtige.
Nun habe ich noch ein Problem die Strings zu verketten.Ich muß den neuen String immer an den alten ranhängen:
z.B. string = string + string
Wobei bei jedem Schleifendurchlauf der aktuell in der Schleife ermittelte String an den vorherigen angehangen wird usw.
Wie mache ich das?
-
vicodas schrieb:
Danke für die schnelle Hilfe, sprintf ist genau das Richtige.
Nun habe ich noch ein Problem die Strings zu verketten.Ich muß den neuen String immer an den alten ranhängen:
z.B. string = string + string
Wobei bei jedem Schleifendurchlauf der aktuell in der Schleife ermittelte String an den vorherigen angehangen wird usw.
Wie mache ich das?
geht auch mit 'sprintf'
beispiel:#include "stdio.h" int main () { char buff[512]; int s, i=0; for (s=8; s<19; s++) i += sprintf (buff+i, "loop: %d\n", s); puts (buff); }
(auf pc laufen lassen)
-
sorry, habe ich nicht ganz verstanden
Hier noch einmal mein Code:
while(t !=NULL) { . . . if (perfdata) { sprintf(outputperfdata, " Sensor%d=%.1f°C;%1f;%1f;0,100.0", t->index +1, v->data, warning, critical); strcat(outputperfdata,outputdata); //pro Schleife zusammenfügen } } printf(" | %s ", outputperfdata); //hier soll der zusammengesetzte String ausgegeben werden
Leider bekomme ich einen segmentation Fehler ???
thx vicodas
-
Dann trag mal als Ziel des sprintf()-Aufrufs das richtige Array (outputdata) ein
Edit: Und wie ich schon sagt - sorg dafür, daß die beiden Arrays groß genug sind für alle ankommenden Daten.
-
sorry, war nur ein Tipfehler, ich sollte halt alles per copy/paste machen,
will Euch nur nicht zu viel Code zumuten...strcat(outputperfdata,outputperfdata);
Wie regel ich denn die Sache mit dem Speicher ?
Variable ist per
char outputperfdata[800];
definiert.
Sagt mir maximal 800 Zeichen, oder?
So viel werden es aber nicht!Trotzdem segmentation Fehler???
EDIT: Die Schleife wird maximal 8 mal durchlaufen.
-
vicodas schrieb:
sorry, war nur ein Tipfehler, ich sollte halt alles per copy/paste machen,
will Euch nur nicht zu viel Code zumuten...strcat(outputperfdata,outputperfdata);
Das ist erst recht sinnlos. Der vorige sprintf() überschreibt dir bereits den frühreren Inhalt deines String und durch diesen Aufruf verdoppelst du die letzte Ausgabe.
[/quote]Wie regel ich denn die Sache mit dem Speicher ?Variable ist per
char outputperfdata[800];
definiert.
Sagt mir maximal 800 Zeichen, oder?
[/quote]Nein, maximal 799 Zeichen (plus abschließendes \0). Außerdem erwartet strcat, daß das Array nullterminiert ist (und nicht initialisierte Arrays sind das idR nicht).EDIT: Die Schleife wird maximal 8 mal durchlaufen.
Und in welchem Durchlauf kracht es? (Tip::Debugger)
-
ok, da hatte ich wohl ein Denkfehler.
sprintf(tmpoutputperfdata, "Sensor%d=%.1f°C;%1f;%1f;0,100.0 ", t->index +1, v->data, warning, critical); strcat(outputperfdata,tmpoutputperfdata); printf(" | %s ", outputperfdata);
ist die Lösung!