Provided by: manpages-nl-dev_4.23.1-1_all bug

NAAM

       printf,  fprintf,  dprintf,  sprintf,  snprintf,  vprintf,  vfprintf,  vdprintf,  vsprintf,  vsnprintf  -
       geformateerde uitvoer conversie

BIBLIOTHEEK

       Standard C bibliotheek  (libc, -lc)

SAMENVATTING

       #include <stdio.h>

       int printf(const char *restrict opmaak, ...);
       int fprintf(FILE *restrict stroom,
                   const char *restrict opmaak, ...);
       int dprintf(int fd,
                   const char *restrict opmaak, ...);
       int sprintf(char *restrict str,
                   const char *restrict opmaak, ...);
       int snprintf(char str[restrict .size], size_t size,
                   const char *restrict opmaak, ...);

       int vprintf(const char *restrict opmaak, va_list ap);
       int vfprintf(FILE *restrict stroom,
                   const char *restrict opmaak, va_list ap);
       int vdprintf(int fd,
                   const char *restrict opmaak, va_list ap);
       int vsprintf(char *restrict str,
                   const char *restrict opmaak, va_list ap);
       int snprintf(char str[restrict .size], size_t size,
                   const char *restrict opmaak, va_list ap);

   Feature Test Macro´s eisen in  glibc (zie feature_test_macros(7)):

       snprintf(), vsnprintf():
           _XOPEN_SOURCE >= 500 || _ISOC99_SOURCE
               || /* glibc <= 2.19: */ _BSD_SOURCE

       dprintf(), vdprintf():
           Vanaf glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           Voor glibc 2.10:
               _GNU_SOURCE

BESCHRIJVING

       De functies in de printf familie produceren  uitvoer  volgens  een  opmaak  zoals  onder  beschreven.  De
       functies  printf  en  vprintf  schrijven  uitvoer  naar  stdout,  de standaard uitvoer stroom; fprintf en
       vfprintf schrijven uitvoer naar de gegeven uitvoer  stroom;  sprintf,  snprintf,  vsprintf  en  vsnprintf
       schrijven naar de karakter string str.

       De functie dprintf()  is hetzelfde als fprintf()  behalve dat het schrijft naar een bestandsbeschrijving,
       fd, in plaats van naar de stdio(3) stroom.

       De  functies  snprintf()   en  vsnprintf()  schrijven maximaal size bytes (inclusief het afsluitende null
       byte ('\0') naar str.

       De functies vprintf(), vfprintf(), vdprintf(), vsprintf(), vsnprintf()  zijn equivalent aan  de  functies
       printf(), fprintf(), dprintf(), sprintf(), snprintf(), respectievelijk, behalve dat ze worden aangeroepen
       met een va_list in plaats van een variabel aantal argumenten..  Deze functies roepen de macro va_end niet
       aan.  Omdat  ze  de  va_arg  macro  gebruiken,  de  waarde  van  ap is ongedefinieerd na de aanroep.  Zie
       stdarg(3).

       Al deze functies  schrijven  de  uitvoer  bepaald  door  een  formaat  tekenreeks  die  specificeert  hoe
       achtereenvolgende  argumenten  (of argumenten benaderd via een argument met variabele lengte faciliteiten
       van strdarg(3)) worden omgezet voor uitvoer.

       C99 en POSIX.1-2001 specificeren dat de resultaten ongedefinieerd zijn als  de  aanroep  van   sprintf(),
       snprintf(),  vsprintf(),  of  vsnprintf()   ervoor  zou  zorgen  dat   er  gekopieerd  moet worden tussen
       overlappende objecten (b.v., als de uitvoer tekenreeks tabel en een  van  de  gegeven  invoer  argumenten
       wijzen naar dezelfde buffer).  Zie OPMERKINGEN.

   Vorm van de formatstring
       De  formatstring is een karakterstring, beginnend en eindigend in zijn initiële "shift state", als die er
       is.  De vormstring bestaat uit nul of meer aanwijzingen: normale karakters (niet %), die onveranderd naar
       de uitvoer stroom worden  gekopiërd;  en  conversie  specificaties,  die  elk  zorgen  dat  nul  of  meer
       opeenvolgende  argumentengepakt worden. Elke conversie specificatie wordt begonnen met het karakter %, en
       eindigt met een "conversie specificatie". Daar tussenin mogen (in deze  volgorde)  nul  of  meer  vlaggen
       aanwezig  zijn,  een  optionele  minimum  veldbreedte,  een  optionele  precisie  en een optionele lengte
       aanpasser.

       De algemene syntaxis van een conversie specificatie is:

           %[$][flags][width][.precision][length modifier]conversion

       De argumenten moeten correct overeenkomen (na type promotie) met  de  conversie  specificatie.  Standaard
       worden  de  argumenten in de gegeven volgorde gebruikt, waarbij elke '*' (zie Veldbreedte en Precisie) en
       elke conversie specificatie vraagt om het volgende argument (en het  is  een  fout  als  een  onvoldoende
       aantal  argumenten zijn gegeven). Men kan ook expliciet opgeven welk argument genomen zal worden, op elke
       plaats waar een argument vereist is, door "%m$" te schrijven in plaats van '%' en  "*m$"  in  plaats  van
       '*',  waar  het decimale hele getal m de positie in de argumenten lijst van het gewenst argument bepaald,
       genummerd vanaf 1. Dus,

           printf("%*d", width, num);

       en

           printf("%2$*1$d", width, num);

       zijn gelijk. De tweede stijl laat  herhaaldelijke  referenties  naar  hetzelfde  argument  toe.   De  C99
       standaard  specificeert  de  '$' stijl niet; die komt van de Single Unix Specification.  Als de '$' stijl
       wordt gebruikt, dan moet die gebruikt worden voor alle conversies die een  argument  meekrijgen  en  alle
       breedte  en  precisie  argumenten.   De stijl mag echter gemengd worden met "%%" vormen die geen argument
       gebruiken.  Er mogen geen gaten zitten in de nummering van de  argumenten  die  met  '$';  gespecificeerd
       worden;  bijvoorbeeld,  als  argumenten  1 en 3 gespecificeerd zijn, dan moet ook argument 2 ergens in de
       formatstring gespecificeerd zijn.

       Voor   sommige   numerieke    conversies    wordt    een    breuk-karakter    ("decimale    komma")    of
       duizendtallen-scheidingskarakter  gebruikt.  Het feitelijk gebruikte karakter hangt af van het LC_NUMERIC
       deel van de taaldefinitie (zie setlocale(3)). De POSIX taaldefinitie gebruikt '.' als breuk-karakter,  en
       heeft geen duizendtallen-scheidingskarakter. Dus:

           printf("%'.2f", 1234567.89);

       resulteert  in  "1234567.89"  in  de  POSIX  localiteit,  in  "1234567,89"  in de nl_NL localiteit, en in
       "1.234.567,89" in de da_DK localiteit.

   De vlag karakters
       Het karakter % wordt gevolgd door nul of meer van de volgende vlaggen:

       #      De waarde moet omgezet worden naar een "alternatieve vorm". Voor o conversies betekent dat dat het
              eerste karakter van de uitvoerstring nul wordt (door een 0 ervoor te zetten als het  niet  al  nul
              was).  Voor  x  en  X  conversies,  heeft  een  niet-nul  resultaat de string "0x" (of "0X" voor X
              conversies) ervoor gezet. Voor a, A, e, E, f, F, g en G omzettingen zal het resultaat  altijd  een
              decimale punt hebben, zelfs als er geen cijfers op volgen (gewoonlijk verschijnt een decimale punt
              alleen  in  de  resultaten van deze conversies als er een cijfer op volgt). Voor g en G conversies
              worden nakomende nullen niet verwijderd van het resultaat, wat anders wel het geval zou zijn. Voor
              m, als errno een geldige foutcode bevat, wordt  de  uitvoer  van  strerrorname_np(errno)  getoond;
              anders  wordt  de  waarde  zoals  opgeslagen  in  errno getoond als een decimaal getal.  For other
              conversions, the result  is undefined. Voor andere omzettingen is het resultaat onbepaald.

       0      De waarde moet met nullen aangevuld worden.  Voor d, i, o, u, x, X, a, A, e,  E,  f,  F,  g  en  G
              omzettingen  wordt  de  geconverteerde  waarde  links  met  nullen  aangevuld,  in  plaats van met
              witruimte. Als de 0 and - vlaggen allebei gezet zijn, dan wordt  de  0  vlag  genegeerd.  Als  een
              precisie  gegeven  is  met  een  numerieke  omzetting  (d,  i,  o,  u, x en X) dan wordt de 0 vlag
              genegeerd. Voor andere conversies is het gedrag onbepaald.

       -      De  geconverteerde  waarde  wordt  links  uitgelijnd  op  de  veldgrens.  (Normaal  wordt   rechts
              uitgelijnd.)  De geconverteerde waarde wordt aan de rechterkant aangevuld met witruimte, in plaats
              van linksmet witruimte of nullen.  Een - heeft voorrang op een 0 als beide gegeven zijn.

       ' '    (een spatie)  Een spatie gaat vooraf aan een positief getal (of lege string) dat gegeven wordt  na
              een conversie met teken.

       +      Een  teken (+ of -) wordt altijd geplaatst voor een getal dat door een conversie met teken gegeven
              wordt.  Normaal gesproken wordt een teken alleen gebruikt voor negatieve getallen.   Een  +  heeft
              voorrang op een spatie als beiden gebruikt worden.

       De  vijf  vlag  tekens  hier  boven  zijn  gedefinieerd in de C99 standaard. De Single UNIX Specification
       specificeert een vlag additioneel teken.

       '      Voor decimale conversie (i, d, u, f, F, g, G) moet de uitvoer gegroepeerd worden met duizendtallen
              scheidingstekens, als het taalgebied die aan geeft (zie setlocale(3)).  Merk op dat  veel  versies
              van  gcc(1)  deze  optie  niet  kunnen lezen, en een waarschuwing zullen geven. (SUSv2 bevatte %'F
              niet, maar SUSv3 voegde het toe. Merk ook op date de standaard taaldefinitie van een  C  programma
              "C"  is, welke taaldefinitie informatie geen duizend' groeperings teken bepaald. Daarom zal zonder
              een voorafgaande aanroep van setlocale(3), geen duizend' groeperings teken worden afgedrukt.

       glibc 2.2 voegde nog een vlag teken toe.

       I      Voor decimale integer conversie (i, d, u) gebruikt de uitvoer de alternatieve uitvoer cijfers  van
              het   taalgebied,   als   die   er   is.   Bijvoorbeeld,  vanaf  glibc  2.2.3  resulteert  dit  in
              Arabisch-Indische cijfers in het Perzische ("fa_IR") taalgebied.

   Veldbreedte
       Een optionele decimaal cijfer reeks (met  het  eerste  cijfer  niet-nul)  dat  een  minimale  veldbreedte
       opgeeft.   Als  de  geconverteerde  waarde  minder  tekens  dan de veldbreedte heeft, dan wordt die links
       aangevuld met spaties (of rechts, als de links-uitlijnen vlag gegeven is). In  plaats  van  een  decimale
       cijfer reeks kan men ook "*" of "*m$" schrijven (voor een decimaal geheel getal m) op aan te geven dat de
       veldbreedte  gegeven  is in het volgende argument, of in het m-de argument, respectievelijk, dat van type
       int moet zijn. Een negatieve veldbreedte wordt gelezen als een  '-'  vlag,  gevolgd  door  een  positieve
       veldbreedte.  In geen geval leidt een niet-bestaande of kleine veldbreedte tot afkappen van een veld; als
       het resultaat van een conversie breder is dan de veldbreedte, dan wordt het veld breder  gemaakt  om  het
       resultaat te kunnen bevatten.

   Precisie
       Een  optionele  precisie, in de vorm van een punt ('.') gevolgd door een optionele decimale cijfer reeks.
       In plaats van een decimale cijfer reeks kan men "*" of "*m$" schrijven (waarbij  m  een  decimaal  geheel
       getal is) om aan te geven dat de precisie gegeven is in respectievelijk het volgende argument of het m-de
       argument,  wat  van  type  int  moet zijn. Als de precisie gegeven is als slechts '.', of als de precisie
       negatief is, dan wordt dit gelezen als nul. Dit bepaalt het minimum aantal cijfers dat voor d, i, o, u, x
       en X conversies moet komen, het aantal cijfers dat na het radix karakter moet komen voor a, A, e, E, f en
       F conversies, het maximum aantal significante cijfers voor g en  G  conversies,  of  het  maximum  aantal
       karakters dat afgedrukt moet worden van een string voor s en S conversies.

   Lengteaanpasser
       Met "integer conversie" wordt hier d, i, o, u, x of X conversie bedoeld.

       hh     Een  volgende  integer  conversie correspondeert met een signed char of unsigned char argument, of
              een volgende n conversie correspondeert met een pointer naar een signed char argument.

       h      Een volgende integer conversie correspondeert met een short of unsigned  short  argument,  of  een
              volgende n conversie correspondeert met een pointer naar een short argument.

       l      (ell)   Een  volgende  integer conversie correspondeert met een long of unsigned long argument, of
              een volgende n conversie correspondeert met een pointer naar een long argument, of een volgende  c
              conversie  correspondeert  met een wint_t argument, of een volgende s conversie correspondeert met
              een pointer naar een wchar_t argument. Bij een volgende  a, A, e, E, f,  F,  g,  of  G  conversie,
              wordt de lengte aanpasser genegeerd (C99; niet in SUSv2).

       ll     (el-el).  Een  volgende  integer  conversie  correspondeert met een long longof unsigned long long
              argument, of een volgende n conversie correspondeert met een pointer naar een long long argument.

       q      Een synoniem for ll.  Dit is een niet-standaard uitbreiding, afgeleid van BSD; vermijd het gebruik
              hiervan in nieuwe code.

       L      Een volgende a, A, e, E, f, F, g of G conversie correspondeert met een long double argument.  (%LF
              wordt toegestaan door C99, maar niet door SUSv2.)

       j      Een  volgende  integer  conversie  correspondeert  met  een intmax_t of uintmax_t argument, of een
              volgende n conversie komt overeen met een wijzer naar een intmax_t argument.

       z      Een volgende integer conversie correspondeert met een size_t of ssize_t argument, of een  volgende
              n conversie komt overeen met een wijzen naar een size_t argument.

       Z      Een  niet-standaard  synoniem voor z die voor af ging aan het verschijnen van z.  Gebruik dit niet
              in nieuwe code.

       t      Een volgende integer conversie correspondeert met  een  ptrdiff_t  argument,  of  een  volgende  n
              conversie overeenkomende met een wijzer naar een ptrdiff_t argument.

       SUSv3  specificeert  alles zoals hierboven, behalve voor die extra toetsen die expliciet gegeven zijn als
       zijnde niet-standaard uitbreidingen.  SUSv2 specificeerde alleen de lengte van de extra toetsen h (in hd,
       hi, ho, hx, hX, hn)  en l (in ld, li, lo, lx, lX, ln, lc, ls)  en L (in Le, LE, Lf, Lg, LG).

       Zijnde een niet-standaard uitbreiding behandelen de GNU implementaties ll en L als synoniemen, daarom kan
       men, bijvoorbeeld ll schrijven (als een synoniem voor de aan  de  standaard  voldoende  Lg)  en  Ld  (als
       synoniem voor de aan de standaard voldoende lld. Dit gebruik is niet overdraagbaar.

   De conversie specificator
       Een  karakter  dat aangeeft welk type van conversie moet worden toegepast. De conversie specificatoren en
       hun betekenis zijn:

       d, i   Het int argument wordt geconverteerd naar decimale notatie met teken. De precisie, als die er  is,
              geeft  het  minimum aantal cijfers dat moet voorkomen; als de geconverteerde waarde minder cijfers
              nodig heeft, dan wordt het links met nullen aangevuld.  De standaard precisie is 1.  Als  0  wordt
              afgedrukt met een expliciete precisie 0, dan is de uitvoer leeg.

       o, u, x, X
              Het  unsigned  int  argument wordt geconverteerd naar octaal zonder teken. "" (u), of hexadecimaal
              zonder teken "" (x en X) notatie.  De letters abcdef worden gebruikt voor x conversies; de letters
              ABCDEF worden gebruikt voor X conversies.  De precisie, als die er is, geeft  het  minimum  aantal
              cijfers  dat  moet verschijnen; als de geconverteerde waarde minder cijfers nodig heeft, dan wordt
              deze links met nullen aangevuld.  De standaard precisie is 1.   Als  0  wordt  afgedrukt  met  een
              expliciete precisie 0, dan is de uitvoer leeg.

       e, E   Het  double  argument  wordt afgerond en geconverteerd in de stijl [-]d.ddde±dd waar er één cijfer
              voor het decimale-punt karakter is, en het aantal cijfers erna gelijk is aan de precisie;  als  de
              precisie  ontbreekt,  dan  wordt die als 6 genomen; als de precisie nul is, dan verschijnt er geen
              decimale-punt karakter.  Een E conversie gebruikt de letter E (in plaats van e) om de exponent aan
              te geven.  De exponent bevat altijd ten minste twee cijfers; als de  waarde  nul  is,  dan  is  de
              exponent 00.

       f, F   Het  double argument wordt afgerond en geconverteerd naar decimale notatie in de stijl [-]ddd.ddd,
              waar het aantal cijfers na het decimale-punt karakter gelijk is aan de precisie specificatie.  Als
              de precisie ontbreekt, dan wordt die als  6  genomen;  als  de  precisie  expliciet  nul  is,  dan
              verschijnt  er  geen  decimale-punt  karakter.  Als  er  een decimale punt verschijnt, dan komt er
              tenminste één cijfer vóór.

              (SUSv2 kent geen F en zegt dat tekenreeks representaties voor oneindig en NaN  beschikbaar  zouden
              kunnen komen.  SYSv3 voegde een specificatie voor F toe. De C99 standaard specificeert "[-]inf" of
              "[-]infinity"  voor  oneindig, en een tekenreeks, beginnend met "nan" voor NaN, in het geval van f
              conversie, en "[-]INF" of "[-]INFINITY" of "NAN*" in het geval van F conversie.)

       g, G   Het double argument wordt geconverteerd in stijl f of e  (of  F  of  E  voor  G  conversies).   De
              precisie  specificeert  het  aantal  significante cijfers. Als de precisie ontbreekt, dat worden 6
              cijfers gegeven; als de precisie nul is, dan wordt het behandeld als 1.  Stijl  e  wordt  gebruikt
              als de exponent van de conversie minder dan -4 is of groter dan of gelijk aan de precisie.  Nullen
              aan  het  eind  worden  verwijderd  van  het fractionele deel van het resultaat; een decimale punt
              verschijnt alleen als die gevolgd wordt door ten minste één cijfer.

       a, A   (C99; niet in SUSv2) Voor a conversie, wordt het double argument geconverteerd  naar  hexadecimale
              notatie (gebruikmakend van de letters abcdef) in de stijl [-]0xh.hhhhp±; voor A conversie wordt de
              prefix  0X,  de  letters ABCDEF, en de exponent scheider P gebruikt. Er is één hexadecimaal cijfer
              voor de decimale punt, en het aantal cijfers erna is gelijk aan de precisie. De standaard precisie
              is genoeg voor een exacte representatie  van  de  waarde  als  een  exacte  binaire  representatie
              bestaat;  anderzijds  is die groot genoeg om waarden van type double te kunnen onderscheiden.  Het
              cijfer voor de decimale punt is onbepaald voor niet-genormaliseerde  getallen,  en  niet-nul  maar
              verder onbepaald voor genormaliseerde getallen.

       c      Als  er  geen l aanpasser is, dan wordt het int argument geconverteerd naar een unsigned char; het
              resulterende teken wordt dan geschreven. Als er een l aanpasser is, dan wordt  het  wint_t  (breed
              karakter)  argument  geconverteerd  naar  een  multibyte  rij  door  een aanroep van de wcrtomb(3)
              functie, met een conversie status in de initiële  status;  de  resulterende  multibyte  tekenreeks
              wordt dan geschreven.

       s      Als er geen l aanpasser is: Het const char * argument wordt aangenomen een wijzer naar een rij van
              character  type (wijzer naar een tekenreeks) te zijn.  Tekens van de rij worden geschreven tot aan
              (en zonder) een afsluitend NULL teken ('\0'); als een precisie gegeven is, dan worden er niet meer
              dan het aangegeven aantal geschreven.  Als een precisie gegeven is, dan hoeft er geen  NULL  teken
              te  zijn;  als de precisie niet gegeven is, of groter is dan de lengte van de rij, dan moet de rij
              een afsluitend NULL teken bevatten.

              Als er een l aanpasser is: Van het const wchar_t * wordt aangenomen dat het een  wijzer  naar  een
              rij  van  brede  karakters  is.  Brede  karakters  van  de rij worden geconverteerd naar multibyte
              karakters (ieder door een aanroep van de wcrtomb functie, met een conversie status beginnend in de
              initiële status vóór het eerste brede teken), tot aan en met een afsluitend null  breed  karakter.
              De  resulterende  multibyte tekens worden geschreven tot aan (en zonder) de afsluitende null byte.
              Als een precisie gegeven is, dan worden niet meer bytes  dan  het  aangegeven  aantal  geschreven;
              echter,  er worden geen gedeeltelijke multibyte karakters geschreven.  Merk op dat de precisie het
              aantal geschreven bytes bepaald, niet het aantal brede karakters of screen positions. De rij  moet
              een afsluitend null breed teken bevatten, tenzij een precisie gegeven is, en de rij zo kort is dat
              het aantal geschreven bytes er over heen gaat voordat het einde van de rij bereikt is.

       C      (Niet in C99, wel in SUSv2, SUSv3 en SUSv4.) Synoniem voor lc. Niet gebruiken.

       S      (Niet in C99 of C11, wel in SUSv2, SUSv3 en SUSv4.) Synoniem voor ls. Niet gebruiken.

       p      Het void * pointer argument is afgedrukt in hexadecimaal (net als bij %#x of %#lx).

       n      Het  aantal  tot nog toe geschreven tekens wordt opgeslagen in het gehele getal  aanwezen door het
              overeenkomende wijzer argument.  Dat argument zal een int zijn, of een variant waarvan de  grootte
              overeenkomt  met  het  (optioneel)  opgegeven gehele getal. Het argument wordt niet geconverteerd.
              (Deze  specificatie  wordt  niet  ondersteund  door  de  bionic  C  bibliotheek.)  Het  gedrag  is
              ongedefinieerd als de conversie specificatie een vlag, een veld breedte of een precisie bevat.

       m      (glibc  uitbreiding;  ondersteund  door  uClibc  en  musl.)  Toon uitvoer van strerror(errno)  (of
              strerrorname_np(errno) in de alternatieve vorm).  Geen argument is vereist.

       %      Een '%'  wordt  geschreven.   Er  wordt  geen  argument  geconverteerd.   De  volledige  conversie
              specificatie is '%%'.

EIND WAARDE

       Bij  succesvolle  terugkeer, retourneert deze functie het aantal tekens dat afgedrukt werd (exclusief het
       NULL byte gebruikt aan het einde van de tekenreeks).

       De functies snprintf()  en vsnprintf() schrijven niet meer dan size bytes (inclusief het afsluitende NULL
       byte  ('\0')). Als de uitvoer werd afgekapt vanwege deze limiet, dan is de teruggegeven waarde gelijk aan
       het aantal tekens (exclusief het afsluitende NULL byte) dat zou zijn geschreven naar de finale tekenreeks
       als er genoeg plaats zou zijn geweest. Dus, een terugkeer waarde van size of meer betekent dat de uitvoer
       werd afgekapt. (Zie hieronder bij OPMERKINGEN.)

       Als er een uitvoer fout werd vastgesteld, dan wordt een negatieve waarde teruggegeven.

ATTRIBUTEN

       Voor een uitleg van de termen in deze sectie, zie attributes(7).
       ┌──────────────────────────────────────────────────────────────┬───────────────────┬────────────────────┐
       │ InterfaceAttribuutWaarde             │
       ├──────────────────────────────────────────────────────────────┼───────────────────┼────────────────────┤
       │ printf(), fprintf(), sprintf(), snprintf(), vprintf(),       │ Thread veiligheid │ MT-Safe taalgebied │
       │ vfprintf(), vsprintf(), vsnprintf()                          │                   │                    │
       └──────────────────────────────────────────────────────────────┴───────────────────┴────────────────────┘

VOLDOET AAN

       fprintf()
       printf()
       sprintf()
       vprintf()
       vfprintf()
       vsprintf()
       snprintf()
       vsnprintf()
              C11, POSIX.1-2008.

       dprintf()
       vdprintf()
              GNU, POSIX.1-2008.

GESCHIEDENIS

       fprintf()
       printf()
       sprintf()
       vprintf()
       vfprintf()
       vsprintf()
              C89, POSIX.1-2001.

       snprintf()
       vsnprintf()
              SUSv2, C99, POSIX.1-2001.

              Betreffende de uitvoer waarde van snprintf(), zijn SUSv2 en C99 tegengesteld:als snprintf()   werd
              aangeroepen  met  size=0  dan  bepaalt  SUSv2  een   ongedefinieerde uitvoer waarde kleiner dan 1,
              terwijl C99 toe staat  str NULL te zijn  in dit geval, en geeft een uitvoer  waarde  terug  (zoals
              altijd)   als  het aantal tekens dat zou zijn geschreven indien de uitvoer tekenreeks groot genoeg
              zou zijn geweest. POSIX.1-2001 en later pasten hun specificatie van snprintf() aan op C99.

       dprintf()
       vdprintf()
              GNU, POSIX.1-2008.

       glibc 2.1 voegt lengte aanpassingen hh, j, t, en z en conversie tekens a en A toe.

       glibc 2.2 voegt het conversie teken F met C99 semantiek, en het  vlag teken I toe.

       glibc 2.35 geeft een betekenis aan de alternatieve vorm  (#)  of de m conversie aanpasser, dat is %#m.

VOORBEHOUD

       Sommige programma´s vertrouwen onvoorzichtig op code zoals de volgende

           sprintf(buf, "%s nog wat tekst", buf);

       om tekst aan buf toe te voegen. Hoewel de standaard expliciet zegt dat de resultaten ongedefinieerd  zijn
       als  bron  een bestemming buffers overlappen bij het aanroepen van  sprintf(), snprintf(), vsprintf(), en
       vsnprintf(). Afhankelijk van de gebruikte versie van gcc(1), en de  toegepaste  compiler  opties,  zullen
       aanroepen als die hierboven  niet het verwachtte resultaat opleveren.

       De  glibc  implementatie  van  de  functies  snprintf()  en vsnprintf() voldoen aan de C99 standaard, dat
       betekent, gedraagt zich zoals boven beschreven, sinds  glibc versie 2.1.  Tot glibc  2.0.6,  zou  dit  -1
       terug geven indien de uitvoer werd afgekapt.

BUGS

       Omdat  sprintf()   en  vsprintf()   uitgaan  van  een  arbitrair  lange  teken  reeks,  aanroepers moeten
       voorzichtig zijn de beschikbare ruimte niet te overlopen, hetgeen  vaak   onmogelijk  is  te  verzekeren.
       Merk  op  dat  de  lengte  van  geproduceerde de teken reeksen  is taalgebied afhankelijk aan moeilijk te
       voorspellen.  Gebruik snprintf()  en vsnprintf()  in plaats van (of asprintf(3)  en vasprintf(3)).

       Code zoals printf(foo); duid vaak op een bug, omdat foo een  % teken kan bevatten.  Als foo afkomstig  is
       van  een  niet  vertrouwde gebruiker invoer kan het %n bevatten, er voor zorgende dat de printf() aanroep
       naar geheugen schrijft daarbij een veiligheid gat creëert.

VOORBEELDEN

       Om Pi af te drukken in vijf decimalen:

           #include <math.h>
           #include <stdio.h>
           fprintf(stdout, "pi = %.5f\n", 4 * atan(1.0));

       Om een datum en tijd in de vorm van "Sunday, July 3, 10:02" af te drukken, waar weekday en month  wijzers
       naar tekenreeksen zijn:

           #include <stdio.h>
           fprintf(stdout, "%s, %s %d, %.2d:%.2d\n",
                   weekday, month, day, hour, min);

       In  veel landen wordt de dag-maand-jaar volgorde gebruikt.  Daarom moet een geïnternationaliseerde versie
       de argumenten af kunnen drukken in een volgorde die gespecificeerd wordt door het format:

           #include <stdio.h>
           fprintf(stdout, format,
                   weekday, month, day, hour, min);

       waar format afhangt van taalgebied, en de argumenten zou kunnen permuteren.  Met de waarde

           "%1$s, %3$d. %2$s, %4$d:%5$.2d\n"

       zou men "Sonntag, 3. Juli, 10:02" kunnen verkrijgen.

       Om een voldoende grote string toe te wijzen en ernaar af te drukken (correcte code voor zowel  glibc  2.0
       als glibc 2.1):

       #include <stdio.h>
       #include <stdlib.h>
       #include <stdarg.h>

       char *
       make_message(const char *fmt, ...)
       {
           int n = 0;
           size_t size = 0;
           char *p = NULL;
           va_list ap;

           /* Bepaal vereiste grootte. */

           va_start(ap, fmt);
           n = vsnprintf(p, size, fmt, ap);
           va_end(ap);

           if (n < 0)
               return NULL;

           size = (size_t) n + 1;      /* Een extra byte voor  '\0' */
           p = malloc(size);
           if (p == NULL)
               return NULL;

           va_start(ap, fmt);
           n = vsnprintf(p, size, fmt, ap);
           va_end(ap);

           if (n < 0) {
               free(p);
               return NULL;
           }

           return p;
       }

       Als  afbreken  optreedt  in glibc versies ouder dan 2.0.6, dan wordt dit behandeld als een fout in plaats
       van dat het elegant wordt afgehandeld.

ZIE OOK

       printf(1), asprintf(3), puts(3), scanf(3), setlocale(3), strfromd(3), wcrtomb(3), wprintf(3), locale(5)

VERTALING

       De Nederlandse vertaling van deze handleiding is geschreven door Jos  Boersema  <joshb@xs4all.nl>,  Joost
       van  Baal  <joostv-manpages-nl-2398@mdcc.cx>,  Mario  Blättermann  <mario.blaettermann@gmail.com>  en Luc
       Castermans <luc.castermans@gmail.com>

       Deze vertaling is vrije documentatie; lees  de  GNU General Public License Version 3  of  later  over  de
       Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.

       Indien  U  fouten  in  de  vertaling  van deze handleiding zou vinden, stuur een e-mail naar debian-l10n-
       dutch@lists.debian.org.

Linux man-pages 6.8                                2 mei 2024                                          printf(3)