.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1999 Andries Brouwer (aeb@cwi.nl) .\" .\" Earlier versions of this page influenced the present text. .\" It was derived from a Berkeley page with version .\" @(#)printf.3 6.14 (Berkeley) 7/30/91 .\" converted for Linux by faith@cs.unc.edu, updated by .\" Helmut.Geyer@iwr.uni-heidelberg.de, agulbra@troll.no and Bruno Haible. .\" .\" %%%LICENSE_START(GPLv2+_DOC_FULL) .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" The GNU General Public License's references to "object code" .\" and "executables" are to be interpreted as the output of any .\" document formatting or typesetting system, including .\" intermediate and printed output. .\" .\" This manual is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public .\" License along with this manual; if not, see .\" . .\" %%%LICENSE_END .\" .\" 1999-11-25 aeb - Rewritten, using SUSv2 and C99. .\" 2000-07-26 jsm28@hermes.cam.ac.uk - three small fixes .\" 2000-10-16 jsm28@hermes.cam.ac.uk - more fixes .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH PRINTF 3 "1 november 2020" GNU "Linux Programmeurs Handleiding" .SH NAAM printf, fprintf, dprintf, sprintf, snprintf, vprintf, vfprintf, vdprintf, vsprintf, vsnprintf \- geformateerde uitvoer conversie .SH SAMENVATTING .nf \fB#include \fP .PP \fBint printf(const char *\fP\fIopmaak\fP\fB, ...);\fP \fBint fprintf(FILE *\fP\fIstroom\fP\fB, const char *\fP\fIopmaak\fP\fB, ...);\fP \fBint dprintf(int \fP\fIfd\fP\fB, const char *\fP\fIopmaak\fP\fB, ...);\fP \fBint sprintf(char *\fP\fIstr\fP\fB, const char *\fP\fIopmaak\fP\fB, ...);\fP \fBint snprintf(char *\fP\fIstr\fP\fB, size_t \fP\fIgrootte\fP\fB, const char *\fP\fIopmaak\fP\fB, ...);\fP \fB#include \fP .PP \fBint vprintf(const char *\fP\fIopmaak\fP\fB, va_list \fP\fIap\fP\fB);\fP \fBint vfprintf(FILE *\fP\fIstroom\fP\fB, const char *\fP\fIopmaak\fP\fB, va_list \fP\fIap\fP\fB);\fP \fBint vdprintf(int \fP\fIfd\fP\fB, const char *\fP\fIopmaak\fP\fB, va_list \fP\fIap\fP\fB);\fP \fBint vsprintf(char *\fP\fIstr\fP\fB, const char *\fP\fIopmaak\fP\fB, va_list \fP\fIap\fP\fB);\fP \fBint vsnprintf(char *\fP\fIstr\fP\fB, size_t \fP\fIgrootte\fP\fB, const char *\fP\fIopmaak\fP\fB, va_list \fP\fIap\fP\fB);\fP .fi .PP .RS -4 Test Macro´s in glibc (zie \fBfeature_test_macros\fP(7)): .RE .PP .ad l \fBsnprintf\fP(), \fBvsnprintf\fP(): .RS 4 _XOPEN_SOURCE\ >=\ 500 || _ISOC99_SOURCE || || /* Glibc versies <= 2.19: */ _BSD_SOURCE .RE .PP \fBdprintf\fP(), \fBvdprintf\fP(): .PD 0 .RS 4 .TP 4 Sinds glibc 2.10: _POSIX_C_SOURCE\ >=\ 200809L .TP Vóór glibc 2.10: _GNU_SOURCE .RE .ad .PD .SH BESCHRIJVING De functies in de \fBprintf\fP familie produceren uitvoer volgens een \fIopmaak\fP zoals onder beschreven. De functies \fBprintf\fP en \fBvprintf\fP schrijven uitvoer naar \fIstdout\fP, de standaard uitvoer stroom; \fBfprintf\fP en \fBvfprintf\fP schrijven uitvoer naar de gegeven uitvoer \fIstroom\fP; \fBsprintf\fP, \fBsnprintf\fP, \fBvsprintf\fP en \fBvsnprintf\fP schrijven naar de karakter string \fIstr\fP. .PP De functie \fBdprintf\fP() is hetzelfde als \fBfprintf\fP() behalve dat het uitvoert naar een bestandsbeschrijving, \fIfd\fP, in plaats van naar de \fIstdio\fP stroom. .PP De functies \fBsnprintf\fP() en \fBvsnprintf\fP() schrijven maximaal \fIsize\fP bytes (inclusief het afsluitende null byte (\(aq\e0\(aq)) naar \fIstr\fP. .PP De functies \fBvprintf\fP(), \fBvfprintf\fP(), \fBvdprintf\fP(), \fBvsprintf\fP(), \fBvsnprintf\fP() zijn equivalent aan de functies \fBprintf\fP(), \fBfprintf\fP(), \fBdprintf\fP(), \fBsprintf\fP(), \fBsnprintf\fP(), respectievelijk, behalve dat ze worden aangeroepen met een \fIva_list\fP in plaats van een variabel aantal argumenten.. Deze functies roepen de macro \fIva_end\fP niet aan. Omdat ze de \fIva_arg\fP macro gebruiken, de waarde van \fIap\fP is ongedefinieerd na de aanroep. Zie \fBstdarg\fP(3). .PP Al deze functies schrijven de uitvoer bepaald door een \fIformaat\fP tekenreeks die specificeert hoe achtereenvolgende argumenten (of argumenten benaderd via een argument met variabele lengte faciliteiten van \fBstrdarg\fP(3)) worden omgezet voor uitvoer. .PP C99 en POSIX.1\-2001 specificeren dat de resultaten ongedefinieerd zijn als de aanroep van \fBsprintf\fP(), \fBsnprintf\fP(), \fBvsprintf\fP(), of \fBvsnprintf\fP() 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. .SS "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 \fB%\fP), 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 \fB%\fP, en eindigt met een "conversie specificatie". Daar tussenin mogen (in deze volgorde) nul of meer \fIvlaggen\fP aanwezig zijn, een optionele minimum \fIveldbreedte\fP, een optionele \fIprecisie\fP en een optionele \fIlengte aanpasser\fP. .PP De argumenten moeten correct overeenkomen (na type promotie) met de conversie specificatie. Standaard worden de argumenten in de gegeven volgorde gebruikt, waarbij elke \(aq*\(aq (zie \fIVeldbreedte\fP en \fIPrecisie\fP) en elke conversie specificatie vraagt om het volgende argument (en het is een fout als een onvoldoende aantal argumentenzijn gegeven). Men kan ook expliciet opgeven welk argument genomen zal worden, op elke plaats waar een argument vereist is, door "%m$" te schrijven inplaats van \(aq%\(aq en "*m$" inplaats van \(aq*\(aq, waar het decimale hele getal \fIm\fP de positie in de argumenten lijst van het gewenst argument bepaald, genummerd vanaf 1. Dus, .PP .in +4n .EX printf("%*d", width, num); .EE .in .PP en .PP .in +4n .EX printf("%2$*1$d", width, num); .EE .in .PP zijn gelijk. De tweede stijl laat herhaaldelijke referenties naar hetzelfde argument toe. De C99 standaard specificeert de \(aq$\(aq stijl niet; die komt van de Single Unix Specification. Als de \(aq$\(aq 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 \(aq$\(aq; gespecificeerd worden; bijvoorbeeld, alsargumenten 1 en 3 gespecificeerd zijn, dan moet ook argument 2 ergens in de formatstring gespecificeerd zijn. .PP Voor sommige numerieke conversies wordt een breuk\-karakter ("decimale komma") of duizendtallen\-scheidingskarakter gebruikt. Het feitelijk gebruikte karakter hangt af van het \fBLC_NUMERIC\fP deel van de "localiteit" (zie \fBsetlocale\fP(3)). De POSIX localiteit gebruikt \(aq.\(aq als breuk\-karakter, en heeft geen duizendtallen\-scheidingskarakter. Dus: .PP .in +4n .EX printf("%\(aq.2f", 1234567.89); .EE .in .PP 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. .SS "De vlag karakters" Het karakter % wordt gevolgd door nul of meer van de volgende vlaggen: .TP \fB#\fP De waarde moet omgezet worden naar een "alternatieve vorm". Voor \fBo\fP 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 \fBx\fP en \fBX\fP conversies, heeft een niet\-nul resultaat de string "0x" (of "0X" voor \fBX\fP conversies) ervoor gezet. Voor \fBa\fP, \fBA\fP, \fBe\fP, \fBE\fP, \fBf\fP, \fBF\fP, \fBg\fP en \fBG\fP 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 \fBg\fP en \fBG\fP conversies worden nakomende nullen niet verwijderd van het resultaat, wat anders wel het geval zou zijn. Voor andere omzettingen is het resultaat onbepaald. .TP \fB\&0\fP De waarde moet met nullen aangevuld worden. Voor \fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP, \fBX\fP, \fBa\fP, \fBA\fP, \fBe\fP, \fBE\fP, \fBf\fP, \fBF\fP, \fBg\fP en \fBG\fP omzettingen wordt de geconverteerde waarde links met nullen aangevuld, in plaats van met witruimte. Als de \fB\&0\fP and \fB\-\fP vlaggen allebei gezet zijn, dan wordt de \fB\&0\fP vlag genegeerd. Als een precisie gegeven is met een numerieke omzetting (\fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP en \fBX\fP) dan wordt de \fB\&0\fP vlag genegeerd. Voor andere conversies is het gedrag onbepaald. .TP \fB\-\fP 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 \fB\-\fP heeft voorrang op een \fB\&0\fP als beide gegeven zijn. .TP \fB\(aq \(aq\fP (een spatie) Een spatie gaat vooraf aan een positief getal (of lege string) dat gegeven wordt na een conversie met teken. .TP \fB+\fP 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 \fB+\fP heeft voorrang op een spatie als beiden gebruikt worden. .PP De vijf vlag tekens hier boven zijn gedefinieerd in de C99 standaard. De Single UNIX Specification specificeert een vlag additioneel teken. .TP \fB\(aq\fP Voor decimale conversie (\fBi\fP, \fBd\fP, \fBu\fP, \fBf\fP, \fBF\fP, \fBg\fP, \fBG\fP) moet de uitvoer gegroepeerd worden met duizendtallen scheidingstekens, als het taalgebied die aan geeft (zie \fBsetlocale\fP(3)). Merk op dat veel versies van \fBgcc\fP(1) deze optie niet kunnen lezen, en een waarschuwing zullen geven. (SUSv2 bevatte \fI%\(aqF\fP niet, maar SUSv3 voegde het toe. .PP glibc 2.2 voegde nog een vlag teken toe. .TP \fBI\fP .\" outdigits keyword in locale file Voor decimale integer conversie (\fBi\fP, \fBd\fP, \fBu\fP) 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. .SS 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 \fIm\fP) op aan te geven dat de veldbreedte gegeven is in het volgende argument, of in het \fIm\fP\-de argument, respectievelijk, dat van type \fIint\fP moet zijn. Een negatieve veldbreedte wordt gelezen als een \(aq\-\(aq 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. .SS Precisie Een optionele precisie, in de vorm van een punt (\(aq.\(aq) gevolgd door een optionele decimale cijfer reeks. In plaats van een decimale cijfer reeks kan men "*" of "*m$" schrijven (waarbij \fIm\fP een decimaal geheel getal is) om aan te geven dat de precisie gegeven is in respectievelijk het volgende argument of het \fIm\fP\-de argument, wat van type \fIint\fP moet zijn. Als de precisie gegeven is als slechts \(aq.\(aq, of als de precisie negatief is, dan wordt dit gelezen als nul. Dit bepaalt het minimum aantal cijfers dat voor \fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP en \fBX\fP conversies moet komen, het aantal cijfers dat na het radix karakter moet komen voor \fBa\fP, \fBA\fP, \fBe\fP, \fBE\fP, \fBf\fP en \fBF\fP conversies, het maximum aantal significante cijfers voor \fBg\fP en \fBG\fP conversies, of het maximum aantal karakters dat afgedrukt moet worden van een string voor \fBs\fP en \fBS\fP conversies. .SS Lengteaanpasser Met "integer conversie" wordt hier \fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP of \fBX\fP conversie bedoeld. .TP \fBhh\fP Een volgende integer conversie correspondeert met een \fIsigned char\fP of \fIunsigned char\fP argument, of een volgende \fBn\fP conversie correspondeert met een pointer naar een \fIsigned char\fP argument. .TP \fBh\fP Een volgende integer conversie correspondeert met een \fIshort\fP of \fIunsigned short\fP argument, of een volgende \fBn\fP conversie correspondeert met een pointer naar een \fIshort\fP argument. .TP \fBl\fP (el) Een volgende integer conversie correspondeert met een \fIlong\fP of \fIunsigned long\fP argument, of een volgende \fBn\fP conversie correspondeert met een pointer naar een \fIlong\fP argument, of een volgende \fBc\fP conversie correspondeert met een \fIwint_t\fP argument, of een volgende \fBs\fP conversie correspondeert met een pointer naar een \fIwchar_t\fP argument. .TP \fBll\fP (el\-el). Een volgende integer conversie correspondeert met een \fIlong long\fPof \fIunsigned long long\fP argument, of een volgende \fBn\fP conversie correspondeert met een pointer naar een \fIlong long\fP argument. .TP \fBq\fP Een synoniem for \fBll\fP. Dit is een niet\-standaard uitbreiding, afgeleid van BSD; vermijd het gebruik hiervan in nieuwe code. .TP \fBL\fP Een volgende \fBa\fP, \fBA\fP, \fBe\fP, \fBE\fP, \fBf\fP, \fBF\fP, \fBg\fP of \fBG\fP conversie correspondeert met een \fIlong double\fP argument. (%LF wordt toegestaan door C99, maar niet door SUSv2.) .TP \fBj\fP Een volgende integer conversie correspondeert met een \fIintmax_t\fP of \fIuintmax_t\fP argument, of een volgende \fBn\fP conversie komt overeen met een wijzer naar een \fIintmax_t\fP argument. .TP \fBz\fP Een volgende integer conversie correspondeert met een \fIsize_t\fP of \fIssize_t\fP argument, of een volgende \fBn\fP conversie komt overeen met een wijzen naar een \fIsize_t\fP argument. .TP \fBZ\fP Een niet\-standaard synoniem voor \fBz\fP die voor af ging aan het verschijnen van \fBz\fP. Gebruik dit niet in nieuwe code. .TP \fBt\fP Een volgende integer conversie correspondeert met een \fIptrdiff_t\fP argument, of een volgende \fBn\fP conversie overeenkomende met een wijzer naar een \fIptrdiff_t\fP argument. .PP 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 \fBh\fP (in \fBhd\fP, \fBhi\fP, \fBho\fP, \fBhx\fP, \fBhX\fP, \fBhn\fP) en \fBl\fP (in \fBld\fP, \fBli\fP, \fBlo\fP, \fBlx\fP, \fBlX\fP, \fBln\fP, \fBlc\fP, \fBls\fP) en \fBL\fP (in \fBLe\fP, \fBLE\fP, \fBLf\fP, \fBLg\fP, \fBLG\fP). .PP .\" Zijnde een niet\-standaard uitbreiding behandelen de GNU implementaties \fBll\fP en \fBL\fP als synoniemen, daarom kan men, bijvoorbeeld \fBll\fP schrijven (als een synoniem voor de aan de standaard voldoende \fBLg\fP) en \fBLd\fP (als synoniem voor de aan de standaard voldoende \fBlld\fP. Dit gebruik is niet overdraagbaar. .SS "De conversie specificator" Een karakter dat aangeeft welk type van conversie moet worden toegepast. De conversie specificatoren en hun betekenis zijn: .TP \fBd\fP, \fBi\fP Het \fIint\fP 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. .TP \fBo\fP, \fBu\fP, \fBx\fP, \fBX\fP Het \fIunsigned int\fP argument wordt geconverteerd naar octaal zonder teken. \fB""\fP (\fBu\fP), of hexadecimaal zonder teken \fB""\fP (\fBx\fP en \fBX\fP) notatie. De letters \fBabcdef\fP worden gebruikt voor \fBx\fP conversies; de letters \fBABCDEF\fP worden gebruikt voor \fBX\fP 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. .TP \fBe\fP, \fBE\fP Het \fIdouble\fP argument wordt afgerond en geconverteerd in de stijl [\-]d\fB\&.\fPddd\fBe\fP\(+-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 \fBE\fP conversie gebruikt de letter \fBE\fP (in plaats van \fBe\fP) om de exponent aan te geven. De exponent bevat altijd ten minste twee cijfers; als de waarde nul is, dan is de exponent 00. .TP \fBf\fP, \fBF\fP Het \fIdouble\fP argument wordt afgerond en geconverteerd naar decimale notatie in de stijl [\-]ddd\fB\&.\fPddd, 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. .IP (SUSv2 kent geen \fBF\fP en zegt dat tekenreeks representaties voor oneindig en NaN beschikbaar zouden kunnen komen. SYSv3 voegde een specificatie voor \fBF\fP toe. De C99 standaard specificeert "[\-]inf" of "[\-]infinity" voor oneindig, en een tekenreeks, beginnend met "nan" voor NaN, in het geval van \fBf\fP conversie, en "[\-]INF" of "[\-]INFINITY" of "NAN*" in het geval van \fBF\fP conversie.) .TP \fBg\fP, \fBG\fP Het \fIdouble\fP argument wordt geconverteerd in stijl \fBf\fP of \fBe\fP (of \fBF\fP of \fBE\fP voor \fBG\fP 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 \fBe\fP 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. .TP \fBa\fP, \fBA\fP (C99; niet in SUSv2) Voor \fBa\fP conversie, wordt het \fIdouble\fP argument geconverteerd naar hexadecimale notatie (gebruikmakend van de letters abcdef) in de stijl [\-]\fB0x\fPh\fB\&.\fPhhhh\fBp\fP\(+-; voor \fBA\fP conversie wordt de prefix \fB0X\fP, de letters ABCDEF, en de exponent scheider \fBP\fP 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 \fIdouble\fP te kunnen onderscheiden. Het cijfer voor de decimale punt is onbepaald voor niet\-genormaliseerde getallen, en niet\-nul maar verder onbepaald voor genormaliseerde getallen. .TP \fBc\fP Als er geen \fBl\fP aanpasser is, dan wordt het \fIint\fP argument geconverteerd naar een \fIunsigned char\fP; het resulterende teken wordt dan geschreven. Als er een \fBl\fP aanpasser is, dan wordt het \fIwint_t\fP (breed karakter) argument geconverteerd naar een multibyte rij door een aanroep van de \fBwcrtomb\fP(3) functie, met een conversie status in de initiële status; de resulterende multibyte tekenreeks wordt dan geschreven. .TP \fBs\fP Als er geen \fBl\fP aanpasser is: Het \fIconst char\ *\fP 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 \fBNULL\fP 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 \fBNULL\fP teken te zijn; als de precisie niet gegeven is, of groter is dan de lengte van de rij, dan moet de rij een afsluitend \fBNULL\fP teken bevatten. .IP Als er een \fBl\fP aanpasser is: Van het \fIconst wchar_t\ *\fP 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 \fBwcrtomb\fP 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 \fIbytes\fP bepaald, niet het aantal \fIbrede karakters\fP of \fIscreen positions\fP. 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. .TP \fBC\fP (Niet in C99, wel in SUSv2, SUSv3 en SUSv4.) Synoniem voor \fBlc\fP. Niet gebruiken. .TP \fBS\fP (Niet in C99 of C11, wel in SUSv2, SUSv3 en SUSv4.) Synoniem voor \fBls\fP. Niet gebruiken. .TP \fBp\fP Het \fIvoid\ *\fP pointer argument is afgedrukt in hexadecimaal (net als bij \fB%#x\fP of \fB%#lx\fP). .TP \fBn\fP Het aantal tot nog toe geschreven tekens wordt opgeslagen in het gehele getal aanwezen door het overeenkomende wijzer argument. Dat argument zal een \fIint\fP 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. .TP \fBm\fP (glibc uitbreiding; ondersteund door uClibc en musl.) Toon uitvoer van \fIstrerror(errno)\fP. Geen argument is vereist. .TP \fB%\fP Een \(aq%\(aq wordt geschreven. Er wordt geen argument geconverteerd. De volledige conversie specificatie is \(aq%%\(aq. .SH "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). .PP De functies \fBsnprintf\fP() en \fBvsnprintf\fP() schrijven niet meer dan \fIsize\fP bytes (inclusief het afsluitende NULL byte (\(aq\e0\(aq))). 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 \fIsize\fP of meer betekent dat de uitvoer werd afgekapt. (Zie hieronder bij OPMERKINGEN.) .PP Als er een uitvoer fout werd vastgesteld, dan wordt een negatieve waarde teruggegeven. .SH ATTRIBUTEN Voor een uitleg van de termen in deze sectie, zie \fBattributes\fP(7). .TS allbox; lbw23 lb lb l l l. Interface Attribuut Waarde T{ \fBprintf\fP(), \fBfprintf\fP(), .br \fBsprintf\fP(), \fBsnprintf\fP(), .br \fBvprintf\fP(), \fBvfprintf\fP(), .br \fBvsprintf\fP(), \fBvsnprintf\fP() T} Thread veiligheid MT\-Safe taalgebied .TE .sp 1 .SH "VOLDOET AAN" \fBfprintf\fP(), \fBprintf\fP(), \fBsprintf\fP(), \fBvprintf\fP(), \fBvfprintf\fP(), \fBvsprintf\fP(): POSIX.1\-2001, POSIX.1\-2008, C89, C99. .PP \fBsnprintf\fP(), \fBvsnprintf\fP(): POSIX.1\-2001, POSIX.1\-2008, C99. .PP De \fBdprintf\fP() en \fBvdprintf\fP() functies waren oorspronkelijk GNU uitbreidingen die later zijn gestandaardiseerd in POSIX.1\-2008. .PP .\" .PP .\" Linux libc4 knows about the five C standard flags. .\" It knows about the length modifiers \fBh\fP, \fBl\fP, \fBL\fP, .\" and the conversions .\" \fBc\fP, \fBd\fP, \fBe\fP, \fBE\fP, \fBf\fP, \fBF\fP, .\" \fBg\fP, \fBG\fP, \fBi\fP, \fBn\fP, \fBo\fP, \fBp\fP, .\" \fBs\fP, \fBu\fP, \fBx\fP, and \fBX\fP, .\" where \fBF\fP is a synonym for \fBf\fP. .\" Additionally, it accepts \fBD\fP, \fBO\fP, and \fBU\fP as synonyms .\" for \fBld\fP, \fBlo\fP, and \fBlu\fP. .\" (This is bad, and caused serious bugs later, when .\" support for \fB%D\fP disappeared.) .\" No locale-dependent radix character, .\" no thousands' separator, no NaN or infinity, no "%m$" and "*m$". .\" .PP .\" Linux libc5 knows about the five C standard flags and the \(aq flag, .\" locale, "%m$" and "*m$". .\" It knows about the length modifiers \fBh\fP, \fBl\fP, \fBL\fP, .\" \fBZ\fP, and \fBq\fP, but accepts \fBL\fP and \fBq\fP .\" both for \fIlong double\fP and for \fIlong long\fP (this is a bug). .\" It no longer recognizes \fBF\fP, \fBD\fP, \fBO\fP, and \fBU\fP, .\" but adds the conversion character .\" .BR m , .\" which outputs .\" .IR strerror(errno) . .\" .PP .\" glibc 2.0 adds conversion characters \fBC\fP and \fBS\fP. Betreffende de uitvoer waarde van \fBsnprintf\fP(), zijn SUSv2 en C99 tegengesteld:als \fBsnprintf\fP() werd aangeroepen met \fIsize\fP=0 dan bepaalt SUSv2 een ongedefinieerde uitvoer waarde kleiner dan 1, terwijl C99 toe staat \fIstr\fP 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 \fBsnprintf\fP() aan op C99. .PP glibc 2.1 voegt lengte aanpassingen \fBhh\fP, \fBj\fP, \fBt\fP, en \fBz\fP en conversie tekens \fBa\fP en \fBA\fP toe. .PP glibc 2.2 voegt het conversie teken \fBF\fP met C99 semantiek, en het vlag teken \fBI\fP toe. .SH OPMERKINGEN Sommige programma´s vertrouwen onvoorzichtig op code zoals de volgende .PP sprintf(buf, "%s some further text", buf); .PP .\" http://sourceware.org/bugzilla/show_bug.cgi?id=7075 om tekst aan \fIbuf\fP toe te voegen. Hoewel de standaard expliciet zegt dat de resultaten ongedefinieerd zijn als bron een bestemming buffers overlappen bij het aanroepen van \fBsprintf\fP(), \fBsnprintf\fP(), \fBvsprintf\fP(), en \fBvsnprintf\fP(). Afhankelijk van de gebruikte versie van \fBgcc\fP(1), en de toegepaste compiler opties, zullen aanroepen als die hierboven \fBniet\fP het verwachtte resultaat opleveren. .PP .\" .SH HISTORY .\" UNIX V7 defines the three routines .\" .BR printf (), .\" .BR fprintf (), .\" .BR sprintf (), .\" and has the flag \-, the width or precision *, the length modifier l, .\" and the conversions doxfegcsu, and also D,O,U,X as synonyms for ld,lo,lu,lx. .\" This is still true for 2.9.1BSD, but 2.10BSD has the flags .\" #, + and and no longer mentions D,O,U,X. .\" 2.11BSD has .\" .BR vprintf (), .\" .BR vfprintf (), .\" .BR vsprintf (), .\" and warns not to use D,O,U,X. .\" 4.3BSD Reno has the flag 0, the length modifiers h and L, .\" and the conversions n, p, E, G, X (with current meaning) .\" and deprecates D,O,U. .\" 4.4BSD introduces the functions .\" .BR snprintf () .\" and .\" .BR vsnprintf (), .\" and the length modifier q. .\" FreeBSD also has functions .\" .BR asprintf () .\" and .\" .BR vasprintf (), .\" that allocate a buffer large enough for .\" .BR sprintf (). .\" In glibc there are functions .\" .BR dprintf () .\" and .\" .BR vdprintf () .\" that print to a file descriptor instead of a stream. De glibc implementatie van de functies \fBsnprintf\fP() en \fBvsnprintf\fP() 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. .SH BUGS .\" .PP .\" Linux libc4.[45] does not have a .\" .BR snprintf (), .\" but provides a libbsd that contains an .\" .BR snprintf () .\" equivalent to .\" .BR sprintf (), .\" that is, one that ignores the .\" .I size .\" argument. .\" Thus, the use of .\" .BR snprintf () .\" with early libc4 leads to serious security problems. Omdat \fBsprintf\fP() en \fBvsprintf\fP() 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 \fBsnprintf\fP() en \fBvsnprintf\fP() in plaats van (of \fBasprintf\fP(3) en \fBvasprintf\fP(3)). .PP .\" .PP .\" Some floating-point conversions under early libc4 .\" caused memory leaks. Code zoals \fBprintf(\fP\fIfoo\fP\fB);\fP duid vaak op een bug, omdat \fIfoo\fP een % teken kan bevatten. Als \fIfoo\fP afkomstig is van een niet vertrouwde gebruiker invoer kan het \fB%n\fP bevatten, er voor zorgende dat de \fBprintf\fP() aanroep naar geheugen schrijft daarbij een veiligheid gat creëert. .SH VOORBEELDEN Om \fIPi\fP af te drukken in vijf decimalen: .PP .in +4n .EX #include #include fprintf(stdout, "pi = %.5f\en", 4 * atan(1.0)); .EE .in .PP Om een datum en tijd in de vorm van "Sunday, July 3, 10:02" af te drukken, waar \fIweekday\fP en \fImonth\fP wijzers naar tekenreeksen zijn: .PP .in +4n .EX #include fprintf(stdout, "%s, %s %d, %.2d:%.2d\en", weekday, month, day, hour, min); .EE .in .PP 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: .PP .in +4n .EX #include fprintf(stdout, format, weekday, month, day, hour, min); .EE .in .PP waar \fIformat\fP afhangt van taalgebied, en de argumenten zou kunnen permuteren. Met de waarde .PP .in +4n .EX "%1$s, %3$d. %2$s, %4$d:%5$.2d\en" .EE .in .PP zou men "Sonntag, 3. Juli, 10:02" kunnen verkrijgen. .PP Om een voldoende grote string toe te wijzen en ernaar af te drukken (correcte code voor zowel glibc 2.0 als glibc 2.1): .PP .EX #include #include #include 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; /* Een extra byte voor \(aq\e0\(aq */ size = (size_t) n + 1; 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; } .EE .PP 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. .SH "ZIE OOK" \fBprintf\fP(1), \fBasprintf\fP(3), \fBputs\fP(3), \fBscanf\fP(3), \fBsetlocale\fP(3), \fBstrfromd\fP(3), \fBwcrtomb\fP(3), \fBwprintf\fP(3), \fBlocale\fP(5) .SH COLOFON Deze pagina is onderdeel van release 5.10 van het Linux \fIman\-pages\fP\-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. .SH VERTALING De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema , Joost van Baal , Mario Blättermann en Luc Castermans . Deze vertaling is vrije documentatie; lees de .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE 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 .MT debian-l10n-dutch@lists.debian.org .ME .