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


von Dominik (Gast)


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

von an (Gast)


Lesenswert?

Du solltest den String vorher abschneiden:

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

von Dominik (Gast)


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??

von Karl H. (kbuchegg)


Lesenswert?

Dominik schrieb:

> Hmm...
> Was nun??

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

von Dominik (Gast)


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

von Karl H. (kbuchegg)


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.

von Dominik (Gast)


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

von Karl H. (kbuchegg)


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.

von DirkB (Gast)


Lesenswert?

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

von Dominik (Gast)


Lesenswert?

@ DirkB

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


Super..
Danke an alle

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.