🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: nl.comp.programmeren
Article #179

Re: Printf: vaste lengte strings en ints?

#179
From: robert
Date: Tue, 01 Mar 2005 09:15
35 lines
2154 bytes
Aquila <braempje@netscape.net>:
 > In een stukje logging code gebruik ik volgend commando:
 > sprintf(buffer, "%s %.9f _%i_ --- %i %i ------- [%i:%i] (%s) %s", event,
 > timeval2double(now), id, pid, length, nid, dst_i, message, additional)
 > Nu is dit niet bepaald veilig omdat buffer een array met vaste lengte is.
 > Hoe kan ik dat veiliger maken?

Je zou snprintf() kunnen gebruiken, waarmee je een maximum grootte kunt
instellen. Eventueel kan je met snprintf() ook eerst bepalen hoe groot de
uitvoer gaat worden, om daarna genoeg geheugen te alloceren en de operatie
alsnog uit te voeren:

  /* grootte bepalen, inclusief ruimte voor \0 aan het einde */
  int size = 1 + snprintf(NULL, 0, "%s ....", ....);

  /* geheugen alloceren */
  char *buf = (char *) malloc(size);

  /* buffer vullen */
  snprintf(buf, size, "%s ....", ....);

(error-checks weggelaten)

 > In concreto: kan %s een maximum lengte opleggen?

Dat kan met bijvoorbeeld %.30s, waarmee dat veld maximaal 30 karakters in
de buffer mag innemen.

 > Kan %i een maximum lengte opleggen zonder daarvoor extra nullen te
 > printen?

Dat kan meen ik niet.

-- 
                                                                      robert
Technical Details
Message-ID: <slrnd28cm3.nsh.robert@home.allyourbass.org>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!news.glorb.com!newsgate.cistron.nl!transit.news.xs4all.nl!post.news.xs4all.nl!not-for-mail
References: <M5qdnYvpZutbs7nfRVnyjA@scarlet.biz>

Show Full Headers
Complete Article Headers
X-Google-Thread: 107324,f962124bbb04ff22
X-Google-Thread: fcea4,f962124bbb04ff22
X-Google-Attributes: gid107324,gidfcea4,public
X-Google-Language: DUTCH,ASCII-7-bit
Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!news.glorb.com!newsgate.cistron.nl!transit.news.xs4all.nl!post.news.xs4all.nl!not-for-mail
Newsgroups: nl.comp.programmeren,be.comp.programming
Subject: Re: Printf: vaste lengte strings en ints?
References: <M5qdnYvpZutbs7nfRVnyjA@scarlet.biz>
Organization: All Your Bass Are Belong To Us
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-15; format=flowed
From: {n.c.p}@allyourbass.org.invalid (robert)
Message-ID: <slrnd28cm3.nsh.robert@home.allyourbass.org>
User-Agent: slrn/0.9.8.1 (Darwin)
Date: 01 Mar 2005 09:15:47 GMT
Lines: 35
NNTP-Posting-Host: 62.216.26.162
X-Trace: 1109668547 news.xs4all.nl 28977 [::ffff:62.216.26.162]:59544
X-Complaints-To: abuse@xs4all.nl