Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Formázott adatok írása sztringbe. Ezen függvények némelyikének biztonságosabb verziói érhetők el; lásd sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l. A puffer biztonságos verziói swprintf és _swprintf_l mérete paraméterként.
Szemantika
int sprintf(
char *buffer,
const char *format [,
argument] ...
);
int _sprintf_l(
char *buffer,
const char *format,
_locale_t locale [,
argument] ...
);
int swprintf(
wchar_t *buffer,
size_t count,
const wchar_t *format [,
argument]...
);
int _swprintf(
wchar_t *buffer,
const wchar_t *format [,
argument]...
);
int _swprintf_l(
wchar_t *buffer,
size_t count,
const wchar_t *format,
_locale_t locale [,
argument] ...
);
int __swprintf_l(
wchar_t *buffer,
const wchar_t *format,
_locale_t locale [,
argument] ...
);
template <size_t size>
int sprintf(
char (&buffer)[size],
const char *format [,
argument] ...
); // C++ only
template <size_t size>
int _sprintf_l(
char (&buffer)[size],
const char *format,
_locale_t locale [,
argument] ...
); // C++ only
Paraméterek
buffer
A kimenet tárolási helye
count
A függvény Unicode-verziójában tárolható karakterek maximális száma.
format
Formátumvezérlő sztring
argument
Választható argumentumok
locale
A használni kívánt területi beállítás.
További információ: Formátumspecifikáció szintaxisa.
Visszaadott érték
Az írott karakterek száma, vagy hiba esetén -1.
format Null buffer mutató esetén a rendszer meghívja az érvénytelen paraméterkezelőt a paraméterérvényesítésben leírtak szerint. Ha a végrehajtás folytatódhat, ezek a függvények visszaadják a -1 és a errno következőre EINVAL: .
sprintf A függvény a függvényben buffertárolt bájtok számát adja vissza, nem számítva a végződő null karaktert.
swprintf A függvény a függvényben buffertárolt széles karakterek számát adja vissza, nem számítva a végződő null széles karaktert.
Megjegyzések
A sprintf függvény karakterek és értékek sorozatát formázja és tárolja a következőben buffer: . Mindegyik argument (ha van ilyen) konvertálása és kimenete a megfelelő formátumspecifikációnak megfelelően történik a következőben format: . A formátum egyszerű karakterekből áll, és az formatprintf argumentumával megegyező formában és függvénnyel rendelkezik. Az utolsó megírt karakter után null karakter lesz hozzáfűzve. Ha a másolás átfedésben lévő sztringek között történik, a viselkedés nincs meghatározva.
Fontos
A használatával sprintfnem lehet korlátozni az írott karakterek számát, ami azt jelenti, hogy a használt sprintf kód hajlamos a puffertúllépésekre. Fontolja meg a kapcsolódó függvény snprintfhasználatát, amely meghatározza, hogy hány karaktert írjon bufferbe, vagy használja _scprintf annak meghatározására, hogy mekkora pufferre van szükség. Győződjön meg arról is, hogy ez format nem felhasználó által definiált sztring.
A Windows 10 2004-es verziójától kezdve (19041-es build) a printf függvénycsalád pontosan ábrázolható lebegőpontos számokat nyomtat az IEEE 754 kerekítési szabályainak megfelelően. A Windows korábbi verzióiban az "5" végződésű lebegőpontos számok mindig felfelé kerekülnek. Az IEEE 754 szerint a legközelebbi páros számjegyre kell kerekíteniük (más néven "Banker kerekítése"). Például mindkettőt printf("%1.0f", 1.5) , és printf("%1.0f", 2.5) 2-re kell kerekítenie. Korábban az 1,5 2-et, a 2,5-öt pedig 3-ra kerekítené. Ez a változás csak a pontosan ábrázolható számokat érinti. Például a 2.35 (amely a memóriában ábrázolva közelebb van a 2.35000000000008-hoz) továbbra is 2,4-re kerekít. A függvények által végzett kerekítés mostantól a lebegőpontos kerekítési fesetroundmódot is figyelembe követi. Korábban a kerekítés mindig a viselkedést választotta FE_TONEAREST . Ez a módosítás csak a Visual Studio 2019 16.2-es és újabb verziójával készült programokat érinti. Az örökölt lebegőpontos kerekítési viselkedés használatához csatolja a legacy_stdio_float_rounding.obj.
swprintf
sprintfa(z) ; a mutató argumentumai swprintf széles karakterű sztringek. A kódolási hibák swprintf észlelése eltérhet a sprintf.
swprintf és fwprintf ugyanúgy viselkedik, kivéve swprintf , ha a kimenetet nem egy típus FILEcélhelyére, hanem egy sztringre írja, és swprintf a count paraméternek meg kell adnia az írandó karakterek maximális számát. Ezeknek a függvényeknek az _l utótaggal rendelkező verziói azonosak, kivéve, ha az aktuális szál területi beállítása helyett a megadott területi paramétert használják.
A szabványosított aláírás swprintf előtt egy régebbi Microsoft C futtatókörnyezeti kódtárban szállított verzió, amely nem kapta meg a karakterszám paramétert. A régebbi verzió továbbra is elérhető a Microsoft C futtatókörnyezeti kódtárában, de elavult, és átnevezték _swprintf(). A régebbi aláírásra írt kód esetén adja meg _CRT_NON_CONFORMING_SWPRINTFS, hogy melyik lesz a következőre swprintf_swprintfirányuló hívás. Egy későbbi verzióban a régi viselkedés el lesz távolítva, ezért a kódot módosítani kell az új megfelelő viselkedés használatára.
A C++ nyelven ezek a függvények sablon-túlterheléssel rendelkeznek, amelyek meghívják a függvények újabb, biztonságos megfelelőit. További információ: A sablon túlterhelésének biztonságossá tételéről.
Általános szöveges rutinleképezések
TCHAR.H rutin |
_UNICODE és _MBCS nincs definiálva |
_MBCS definiálva |
_UNICODE definiálva |
|---|---|---|---|
_stprintf |
sprintf |
sprintf |
_swprintf |
_stprintf_l |
_sprintf_l |
_sprintf_l |
__swprintf_l |
Követelmények
| Rutin | Kötelező fejléc |
|---|---|
sprintf, _sprintf_l |
<stdio.h> |
| \ |
<stdio.h> vagy <wchar.h> |
További kompatibilitási információkért lásd: Kompatibilitás.
Példa: Adatok sprintf formázása
// crt_sprintf.c
// compile with: /W3
// This program uses sprintf to format various
// data and place them in the string named buffer.
#include <stdio.h>
int main( void )
{
char buffer[200], s[] = "computer", c = 'l';
int i = 35, j;
float fp = 1.7320534f;
// Format and print various data:
j = sprintf( buffer, " String: %s\n", s ); // C4996
j += sprintf( buffer + j, " Character: %c\n", c ); // C4996
j += sprintf( buffer + j, " Integer: %d\n", i ); // C4996
j += sprintf( buffer + j, " Real: %f\n", fp );// C4996
// Note: sprintf is deprecated; consider using sprintf_s instead
printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
Output:
String: computer
Character: l
Integer: 35
Real: 1.732053
character count = 79
Példa: Hibakódkezelés
// crt_swprintf.c
// wide character example
// also demonstrates swprintf returning error code
#include <stdio.h>
int main( void )
{
wchar_t buf[100];
int len = swprintf( buf, 100, L"%s", L"Hello world" );
printf( "wrote %d characters\n", len );
len = swprintf( buf, 100, L"%s", L"Hello\xffff world" );
// swprintf fails because string contains WEOF (\xffff)
printf( "wrote %d characters\n", len );
}
wrote 11 characters
wrote -1 characters
Lásd még
Stream I/O-
fprintf, _fprintf_l, fwprintf_fwprintf_l
printf, _printf_l, wprintf_wprintf_l
scanf, _scanf_l, wscanf_wscanf_l
sscanf, _sscanf_l, swscanf_swscanf_l
vprintf funkciók