Funktion, die printf format-strings nimmt und einen char * zurückgibt?

Post Reply
Message
Author
weissi
Posts: 40
Joined: 24. Mar 2001 20:16
Location: Freiburg
Contact:

Funktion, die printf format-strings nimmt und einen char * zurückgibt?

#1 Post by weissi »

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

prg_tom
Posts: 60
Joined: 21. May 2001 14:20
Location: Österreich

Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

#2 Post by prg_tom »

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

grüße tom...

das
Posts: 78
Joined: 22. Jan 2001 1:37
Location: 42369 Wuppertal

Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

#3 Post by das »

sprintf()

das
Posts: 78
Joined: 22. Jan 2001 1:37
Location: 42369 Wuppertal

Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

#4 Post by das »

Verdammt, 24 Sekunden... <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

#5 Post by bakunin »

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

das
Posts: 78
Joined: 22. Jan 2001 1:37
Location: 42369 Wuppertal

Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

#6 Post by das »

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

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

#7 Post by bakunin »

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

das
Posts: 78
Joined: 22. Jan 2001 1:37
Location: 42369 Wuppertal

Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

#8 Post by das »

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\<!--no-->nEin String: %200s\<!--no-->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\<!--no-->nEin String: %s\<!--no-->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
Last edited by das on 18. Jun 2001 21:58, edited 1 time in total.

weissi
Posts: 40
Joined: 24. Mar 2001 20:16
Location: Freiburg
Contact:

Re: Funktion, die printf format-strings nimmt und einen char * zurückgibt?

#9 Post by weissi »

Danke euch allen, die Community is einfach cool :)))
Weissi

Post Reply