Routine sprintf

Gast #652042
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
> 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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren