🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #1494

Re: Printf: vaste lengte strings en ints?

#1494
From: John Bokma
Date: Wed, 02 Mar 2005 15:00
61 lines
2951 bytes
moi wrote:

> Dr.Ruud wrote:
>> Wat Aquila schreef, bleek het
>> begin  van iets moois; kijk zelf maar:
>> 
>> 
>>>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)
>> 
>> 
> 
>>>[...]
>>>Kan %i een maximum lengte opleggen zonder daarvoor extra nullen te
>>>printen? In beide gevallen mag er afgekapt worden, ik wil gewoon
>>>beveiligingsfouten vermijden.
>> 
>> 
>> Nee, maar je zou wel kunnen casten, bijvoorbeeld
>>   (int32) id
>> want op die manier weet je dat %i maximaal 10 tekens kan opleveren,
>> zelfs als later 'id' een 64-bits integer zou worden.
>> 
> 
> Is wel erg paranoide, IMO, om rekening te houden met andere sizes.

Nee, zeer zeker niet.

> En onsmakelijk om daar een cast voor te gebruiken.
> Een int is een int. een "%d" of "%i" verwijst naar een int in de 
> arglist, ongeacht zijn/haar sizeof.
> 
> Het eenvoudigst, IMHO is om de buffer gewoon groot genoeg te maken:

Tja, en dat is? Het duidelijkste is om de afmeting van de buffer te
baseren op de maximaal mogelijke afmeting. 

> Dat is 19 pos + teken voor een 64bits int, als ik goed geteld hebt.

Te veel bugs zijn van de "als ik goed" vorm :-(

> Samenvattend:
> * (over)Alloceren op de stack ("auto") kost vrijwel niks. (je moet het
>     natuurlijk niet in ieder functie doen, en dan duizenden lagen
>     diep. 
> * voor strings is "%20s" nodig om maximaal 20 chars af te beelden.

Wat gebeurd er als ik een string van 30 tekens heb?

> * voor ints (en floats, in mindere mate) ligt het maximaal benodigde
>    min-of-meer vast.

Nee: het ligt vast vzviw.

-- 
John Bokma
                 Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Ervaren Perl / Java programmeur beschikbaar:  http://castleamber.com/
Tevreden opdrachtgevers:     http://castleamber.com/testimonials.html
Technical Details
Message-ID: <Xns960D5B9AC5FAcastleamber@130.133.1.4>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
References: <M5qdnYvpZutbs7nfRVnyjA@scarlet.biz> <d01i4u.14c.1@news.isolution.nl> <CqudnXnc_MjnCbjfRVnyhg@casema.nl>

Show Full Headers
Complete Article Headers
X-Google-Thread: fcea4,f962124bbb04ff22
X-Google-Thread: 107324,f962124bbb04ff22
X-Google-Attributes: gidfcea4,gid107324,public
X-Google-Language: DUTCH,ASCII-7-bit
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: John Bokma <postmaster@castleamber.com>
Newsgroups: be.comp.programming,nl.comp.programmeren
Subject: Re: Printf: vaste lengte strings en ints?
Date: 2 Mar 2005 15:00:18 GMT
Organization: Castle Amber - software development
Lines: 61
Message-ID: <Xns960D5B9AC5FAcastleamber@130.133.1.4>
References: <M5qdnYvpZutbs7nfRVnyjA@scarlet.biz> <d01i4u.14c.1@news.isolution.nl> <CqudnXnc_MjnCbjfRVnyhg@casema.nl>
X-Trace: individual.net O8VDCTIFLF5qN41BT3YFKg07JkTiSpbCz3QPMisP+1lrlxfDuC
User-Agent: Xnews/5.04.25
X-Face: $7h&5K*ZL9*ZQ\6Hco2"V?1dD*C<ab^>zlws[S%i0b,@gKk|[,)Y-<hk143{.Ov"x{({zo( l,N\m`-_^nJfVQdEyt+-uAP^7WG]5mHj9&::7X-qK;Yv;xmRvNWQR"_igw+cr5WMj;6:zlj<R80Ei@ $gGWq&*{FL*kC*a