Provided by: manpages-nl-dev_4.15.0-9_all bug

NAAM

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

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 *restrict str, size_t size,
                   const char *restrict opmaak, ...);

       #include <stdarg.h>

       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 vsnprintf(char *restrict str, 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.b.., 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, alsargumenten 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 "localiteit" (zie setlocale(3)). De POSIX localiteit 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 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.

       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      (el)   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.

       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; 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).  Geen argument is vereist.

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

EIND WAARDE

       Bij succesvolle terugkeer, retourneren 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(),     │ Thread veiligheid │ MT-Safe taalgebied │
       │vprintf(), vfprintf(), vsprintf(), vsnprintf()  │                   │                    │
       └────────────────────────────────────────────────┴───────────────────┴────────────────────┘

VOLDOET AAN

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

       snprintf(), vsnprintf(): POSIX.1-2001, POSIX.1-2008, C99.

       De dprintf()  en vdprintf()  functies waren oorspronkelijk  GNU  uitbreidingen  die  later
       zijn gestandaardiseerd in POSIX.1-2008.

       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.

       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.

OPMERKINGEN

       Sommige programma´s vertrouwen onvoorzichtig op code zoals de volgende

           sprintf(buf, "%s some further text", 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 als 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 benodigde 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)

COLOFON

       Deze   pagina  is  onderdeel  van  release  5.13  van  het  Linux  man-pages-project.  Een
       beschrijving van het project, informatie over het melden van bugs en  de  nieuwste  versie
       van deze pagina zijn op https://www.kernel.org/doc/man-pages/ te vinden.

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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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⟩.