Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Funktion, die printf format-strings nimmt und einen char * zurückgibt?

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
weissi



Anmeldungsdatum: 24.03.2001
Beiträge: 40
Wohnort: Freiburg

BeitragVerfasst am: 18. Jun 2001 14:11   Titel: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

Hi,
ich suche eine Funktion, der ich Format-Strings wie in printf() übergeben kann, die dann aber nicht auf den Bilschirm schreibt, sondern einen char * füllt...
Also, falls es sowas gibt, wär das echt cool...
Danke schon mal im Vorraus
Weissi
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

prg_tom



Anmeldungsdatum: 21.05.2001
Beiträge: 60
Wohnort: Österreich

BeitragVerfasst am: 18. Jun 2001 14:48   Titel: Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

gibt es:
sprintf( char *buffer, const char *format [, argument] ... );

grüße tom...
 
Benutzer-Profile anzeigen Private Nachricht senden

das



Anmeldungsdatum: 22.01.2001
Beiträge: 78
Wohnort: 42369 Wuppertal

BeitragVerfasst am: 18. Jun 2001 14:49   Titel: Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

sprintf()
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

das



Anmeldungsdatum: 22.01.2001
Beiträge: 78
Wohnort: 42369 Wuppertal

BeitragVerfasst am: 18. Jun 2001 14:50   Titel: Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

Verdammt, 24 Sekunden...
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

bakunin



Anmeldungsdatum: 16.08.1999
Beiträge: 597
Wohnort: Lorsch (Südhessen)

BeitragVerfasst am: 18. Jun 2001 15:20   Titel: Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

Hi!

Nimmt man da nicht besser asprintf()? Dadurch wird gleich ein entsprechender Puffer alloziert, wärend es sonst zu einem Überlauf kommen kann.

Cheers,
Wolfgang
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

das



Anmeldungsdatum: 22.01.2001
Beiträge: 78
Wohnort: 42369 Wuppertal

BeitragVerfasst am: 18. Jun 2001 17:36   Titel: Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

Hi,

asprintf() funktioniert wohl auch, ist aber alles andere als portabel. Die Funktion existiert zwar in glibc, und möglicherweise auch in einigen anderen C-Libraries, aber sicher nicht in allen. Wenn das Programm eh nur unter Linux laufen soll, kann einem das natürlich egal sein, IMHO ist das aber ziemlich kurzsichtig..

CU,
Dominic
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

bakunin



Anmeldungsdatum: 16.08.1999
Beiträge: 597
Wohnort: Lorsch (Südhessen)

BeitragVerfasst am: 18. Jun 2001 21:15   Titel: Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

Hi!

Gibt es eine Möglichkeit, sicheren Code ohne diese Funktion zu schreiben? Ich kenn eldier keinen.

Klar, normal ist Portabilität Trumpf, aber ich würde im Zeifelsfall _funktionierenden_ Code gegenüber portablem dann doch vorziehen. Wer bewusst akzeptiert, dass sein Code unter Umständen segfaulten kann, der soll das tun, aber mit ist sprintf() "nicht gut genug".

Cheers,
Wolfgang
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

das



Anmeldungsdatum: 22.01.2001
Beiträge: 78
Wohnort: 42369 Wuppertal

BeitragVerfasst am: 18. Jun 2001 21:58   Titel: Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

Hi,

Wenn man sprintf() richtig einsetzt, lassen sich zumindest segfaults sicher verhindern, indem man z.B. bei allen Variablen die maximale Feldgröße mit angibt.

z.B.:

char buffer[256];
int n = ...;
char * str = ...;
...
sprintf (buffer, "Ein Integer: %5d\nEin String: %200s\n", n, str);

Egal wie groß der Wert von n ist, oder wie lang der String str ist, segfaulten wird das Programm nicht, das schlimmste was passieren kann, ist daß Teile des Integers oder des Strings abgeschnitten werden, wenn sie länger als 5 bzw. 200 Zeichen sind.

Davon abgesehen lässt sich eigentlich immer schon vor dem Aufruf von sprintf() feststellen wie groß der Puffer sein muss.

z.B.:

int n = ...;
char * str = ...;
char * format = "Ein Integer: %d\nEin String: %s\n";
...
char * buffer = (char*) malloc (strlen(format) + 11 + strlen(str) + 1);
sprintf (buffer, format, n, str);

Die Länge die der Puffer haben muß um ganz sicher zu gehen entspricht also der Summe aus
- Länge des Format Strings (genaugenommen könnte man hiervon noch das "%d" und das "%s" abziehen),
- Maximale Länge eines Integers (Zehnstellig plus evtl. Minuszeichen),
- Länge des Strings str,
- Null-Byte.

Ich hab's nicht getestet, solte aber funktionieren. Ich gebe zu daß asprintf() einfacher ist, aber sicherer ist es nicht, wenn man sprintf() vorsichtig verwendet.

CU,
Dominic


Zuletzt bearbeitet von das am 18. Jun 2001 21:58, insgesamt 1-mal bearbeitet
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

weissi



Anmeldungsdatum: 24.03.2001
Beiträge: 40
Wohnort: Freiburg

BeitragVerfasst am: 19. Jun 2001 11:30   Titel: Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

Danke euch allen, die Community is einfach cool Smile))
Weissi
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy