Provided by: manpages-nl-dev_4.27.0-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 gekopieerd;  en  conversie  specificaties,  die  elk  zorgen  dat  nul  of  meer
       opeenvolgende argumenten gepakt 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:

           %[$][vlaggen][breedte][.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", breedte, num);

       en

           printf("%2$*1$d", breedte, 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 aanpassing is: Het const char * argument wordt aangenomen een wijzer  te  zijn  naar
              een  rij van character type (wijzer naar een tekenreeks).  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]rs]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-pagina's 6.9.1                          15 juni 2024                                         printf(3)