mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anzahl der zeichen in String angeben Printf %S


Autor: Dominik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich stehe vor dem Problem, dass ich eine string XX habe in dem eine 8 
zeichen lange kette drinne steht. In einer printf ausgabe kann ich  mir 
den String mit %s ausgaben lassen. Funktioniert auch, nun habe ich aber 
das problem das ich nur die ersten 4 Zeichen des Strings ausgeben 
darf...
Gibt es da eine möglickeit wie z.B. bei einer float, da kann man ja auch 
beschreiben wie viele vor und nachkomma stellen man ausgeben will.


Vielen Dank im Vorraus

Autor: an (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest den String vorher abschneiden:

string[4]=0;
printf("%s",string);

Autor: Dominik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, habe es so ausprobiert, wie du es gesagt hast, aber da meckert 
der Kompiler, dass der string zu kurtz ist. Bzw der string xx den ich in 
string reinschreiben will zu lang.


Hmm...
Was nun??

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dominik schrieb:

> Hmm...
> Was nun??

Zeig deinen Code, dann hört das Rätselraten auf dieser Seite des 
Bildschirms auf.

Autor: Dominik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sooo.. SR ist der string wo ich nur 4 Zeichen ausgeben möchte..



printf_P(PSTR("%-2d    %s   %-7lu    %-2.1f    %s    %d\r"),
             address, NA_STRING, system_GetSerialNumber() == 0xFFFFFFFF 
? 0
             : system_GetSerialNumber(), system_GetHardwareRevision(),
                                    SR, GetTotalNumberOfErrors());



Mein Ansatz war jetzt:

char shortSR[4] = SR;


printf_P(PSTR("%-2d    %s   %-7lu    %-2.1f    %s    %d\r"),
             address, NA_STRING, system_GetSerialNumber() == 0xFFFFFFFF 
? 0
             : system_GetSerialNumber(), system_GetHardwareRevision(),
             shortSR, GetTotalNumberOfErrors());



und da Meckert halt der Komiler...



Gruß Dominik

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dominik schrieb:
> Sooo.. SR ist der string wo ich nur 4 Zeichen ausgeben möchte..
>

Ich nehme an SR ist der bewusste Kandidat?

>
> Mein Ansatz war jetzt:
>
> char shortSR[4] = SR;

Nein. Das geht so nicht.

Wenn schon, dann könntest du dir den Teil des Strings umkopieren

  char shortSR[5];
  strncpy( shortSR, SR, 4 );
  shortSR[4] = '\0';

aber abhängig davon, wer oder was SR eigentlich ist, gibt es auch noch 
einfachere Möglichkeiten. Nur leider kann man dazu nicht viel mehr 
sagen, denn den interessanten Teil, wie SR eigentlich aussieht, hast du 
wieder mal nicht gezeigt.

Bei Code-Ausschnitten gehören immer die Variablendeklarationen mit dazu! 
Denn abhängig von deren genauen Datentypen tun sich unterschiedliche 
Wege auf.

Autor: Dominik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok....

Also was SR ist..

/// software revision.
#define SR "1.03/15.10.2010"


ich möchte halt das Datum abtrennen, da es nur an einer betimmten stelle 
mit ausgegeben werden soll (andere printf ausgabe)


Gruß

Dominik

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dominik schrieb:
> Ok....
>
> Also was SR ist..
>
> /// software revision.
> #define SR "1.03/15.10.2010"
>
>
> ich möchte halt das Datum abtrennen, da es nur an einer betimmten stelle
> mit ausgegeben werden soll (andere printf ausgabe)

Was spricht dann dagegen, dass du

#define REVISION  "1.03"
#define REV_DATE  "15.10.2010"

und an bewusster anderer Stelle gibst du beides hintereinander mit dem 
von dir vorgesehenen Trennzeichen aus.

 die andere Stelle
   printf( "%s/%s", REVISION, REV_DATE );
    // oder:   printf( REVISION "/" REV_DATE );


Auf jeden Fall hast du dann die Revision 'freistehend' und brauchst an 
den Stellen, an denen du nur die Revision benötigst, keine Klimmzüge.

Autor: DirkB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus meiner Erinnerung:
Tuts ein printf("%.4s", text); nicht auch?

Autor: Dominik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ DirkB

Das war die Lösung für mein Problem, so hat es funktioniert...


Super..
Danke an alle

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.