Routine sprintf

Gast #652042
Hat jemand eine Idee, wie ich eine variable Anzahl von Integer-Werten in 
einen einzelnen String einfüge (dieser wird anschließend mittels SCI 
gesendet).
Bei der Nutzung von sprintf kann man ja nur eine definierte Anzahl an 
Werten zum String hinzufügen. Diese Anzahl muss jedoch variabel 
gestaltet werden.
Gibt es irgendwo eine fertige Routine hierfür?

Danke schonmal
Persönliche Seite #652049
> Diese Anzahl muss jedoch variabel gestaltet werden.

Eine Möglichkeit bestünde darin, eine Funktion mit variabler 
Argumentenliste (...) zu verwenden und über die in stdarg.h definierten 
Funktionen va_start/va_end die Anzahl der Argumente zu bestimmen, daraus 
dynamisch den Formatstring durch ausreichend häufiges zusammenfügen von 
"%d " zu generieren. Der so erzeugte Formatstring wird dann vsprintf 
zusammen mit der von va_start erzeugten Argumentenliste übergeben.

Nur: Wozu braucht man sowas?
#652050
Maik wrote:
> Hat jemand eine Idee, wie ich eine variable Anzahl von Integer-Werten in
> einen einzelnen String einfüge (dieser wird anschließend mittels SCI
> gesendet).
> Bei der Nutzung von sprintf kann man ja nur eine definierte Anzahl an
> Werten zum String hinzufügen. Diese Anzahl muss jedoch variabel
> gestaltet werden.
> Gibt es irgendwo eine fertige Routine hierfür?

itoa() macht dir die Konvertierung eines Wertes in einen
ASCII String. Das ganze dann in einer Schleife und die
Einzelteile mittels strcat zusammensetzen.

http://www.mikrocontroller.net/articles/FAQ#itoa.28.29
http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F
#652055
Oder aber natürlich:
Du sparst dir das zusammensetzen eines kompletten Strings
und bringst die Einzelteile nacheinander auf den Weg.

So in etwa

  int Werte[20];
  char Buffer[100];

  ....


  for( i = 0; i < 20; ++i ) {
    itoa( Werte[i], Buffer, 10 );
    TransmitString( Buffer );
    if( i != 19 )
      TransmitString( "," );
  }

ist die allereinfachste und resourcenschonendste Variante.
Gast #652080
Danke Dir, das läuft----zwar mit sprintf--weil der compiler(iccarm) 
irgendwie itoa nicht kennt und noch irgendwie in einer 
Endlosschleife--:-(

Aber ansonsten hat es mir viel geholfen.

Gruß Maik

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.