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. Ezek a függvények a , sprintf, _sprintf_l, swprintfverziójú_swprintf_l változatai, __swprintf_l a CRT biztonsági funkcióiban leírtak szerinti biztonsági fejlesztésekkel.
Szemantika
int sprintf_s(
char *buffer,
size_t sizeOfBuffer,
const char *format,
...
);
int _sprintf_s_l(
char *buffer,
size_t sizeOfBuffer,
const char *format,
_locale_t locale,
...
);
int swprintf_s(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format,
...
);
int _swprintf_s_l(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format,
_locale_t locale,
...
);
template <size_t size>
int sprintf_s(
char (&buffer)[size],
const char *format,
...
); // C++ only
template <size_t size>
int swprintf_s(
wchar_t (&buffer)[size],
const wchar_t *format,
...
); // C++ only
Paraméterek
buffer
A kimenet tárolási helye
sizeOfBuffer
Tárolandó karakterek maximális száma.
format
Formátumvezérlő sztring
...
Nem kötelező formázandó 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. Ha buffer vagy null mutató, sprintf_s akkor swprintf_s adja vissza a -1 és állítsa be errno a következőreEINVAL: .format
sprintf_s 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_s 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_s 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.
Az egyik fő különbség sprintf_ssprintf az, hogy a formázási sztring érvényes formázási karaktereket keres, míg sprintf csak azt ellenőrzi, hogy sprintf_s a formázási sztring vagy a puffer NULL mutató-e. Ha bármelyik ellenőrzés sikertelen, 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 folytatva van, a függvény -1 ad vissza, és a következőre állítja be errno : EINVAL.
A másik fő különbség sprintf_ssprintf az, hogy sprintf_s a kimeneti puffer méretét karakterben megadva egy hosszparamétert vesz igénybe. Ha a puffer túl kicsi a formázott szöveghez , beleértve a null végződést is, akkor a puffer üres sztringre van állítva úgy, hogy egy null karaktert buffer[0]helyez el, és a rendszer meghívja az érvénytelen paraméterkezelőt. Ellentétben _snprintfazzal, sprintf_s hogy a puffer null értékű lesz, kivéve, ha a puffer mérete nulla.
swprintf_s
sprintf_sa(z) ; a mutató argumentumai swprintf_s széles karakterű sztringek. A kódolási hibák swprintf_s észlelése eltérhet az észleléstől sprintf_s. Ezeknek a függvényeknek az utótaggal ellátott _l verziói azonosak, azzal a különbséggel, hogy az aktuális szál területi beállítása helyett a területi paramétert használják.
A C++-ban ezeknek a függvényeknek a használatát a sablontúlterheltség leegyszerűsíti. A túlterhelések automatikusan kikövetkezhetik a puffer hosszát, ami szükségtelenné teszi a méretargumentum megadását. A régebbi, nem biztonságos függvényeket pedig automatikusan lecserélhetik újabb, biztonságosabb megfelelőkre. További információ: A sablon túlterhelésének biztonságossá tételéről.
Vannak olyan verziók sprintf_s , amelyek nagyobb mértékben szabályozják, hogy mi történik, ha a puffer túl kicsi. További információ: _snprintf_s, _snprintf_s_l, _snwprintf_s. _snwprintf_s_l
Fontos
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.
Általános szöveges rutinleképezések
| TCHAR. H rutin |
_UNICODE és _MBCS nincs definiálva |
_MBCS definiálva |
_UNICODE definiálva |
|---|---|---|---|
_stprintf_s |
sprintf_s |
sprintf_s |
swprintf_s |
_stprintf_s_l |
_sprintf_s_l |
_sprintf_s_l |
_swprintf_s_l |
Követelmények
| Rutin | Kötelező fejléc |
|---|---|
sprintf_s, _sprintf_s_l |
C: <stdio.h> C++: <cstdio> vagy <stdio.h> |
swprintf_s, _swprintf_s_l |
C: <stdio.h> vagy <wchar.h> C++: <cstdio>, <cwchar>, <stdio.h> vagy <wchar.h> |
További kompatibilitási információkért lásd: Kompatibilitás.
Példa: Adatok formázása sprintf_s használatával
// crt_sprintf_s.c
// This program uses sprintf_s 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_s( buffer, 200, " String: %s\n", s );
j += sprintf_s( buffer + j, 200 - j, " Character: %c\n", c );
j += sprintf_s( buffer + j, 200 - j, " Integer: %d\n", i );
j += sprintf_s( buffer + j, 200 - j, " Real: %f\n", fp );
printf_s( "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_s.c
// wide character example
// also demonstrates swprintf_s returning error code
#include <stdio.h>
int main( void )
{
wchar_t buf[100];
int len = swprintf_s( buf, 100, L"%s", L"Hello world" );
printf( "wrote %d characters\n", len );
len = swprintf_s( buf, 100, L"%s", L"Hello\xffff world" );
// swprintf_s 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
sprintf, _sprintf_l, swprintf, _swprintf_l__swprintf_l
scanf, _scanf_l, wscanf_wscanf_l
sscanf, _sscanf_l, swscanf_swscanf_l
vprintf funkciók