_gcvt_s
Převede hodnotu s plovoucí desetinnou čárkou na řetězec. Tato funkce je verze _gcvt
s vylepšeními zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.
Syntaxe
errno_t _gcvt_s(
char *buffer,
size_t sizeInBytes,
double value,
int digits
);
template <size_t cchStr>
errno_t _gcvt_s(
char (&buffer)[cchStr],
double value,
int digits
); // C++ only
Parametry
buffer
Vyrovnávací paměť pro uložení výsledku převodu.
sizeInBytes
Velikost vyrovnávací paměti.
value
Hodnota, která se má převést.
digits
Počet uložených významných číslic
Vrácená hodnota
Nula v případě úspěchu. Pokud dojde k selhání kvůli neplatnému parametru (viz následující tabulka neplatných hodnot), vyvolá se neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud je možné pokračovat spuštěním, vrátí se kód chyby. Kódy chyb jsou definovány v Errno.h. Seznamtěchtoch errno
_doserrno
_sys_errlist
_sys_nerr
Chybové podmínky
buffer |
sizeInBytes |
value |
digits |
Zpět | Hodnota v buffer |
---|---|---|---|---|---|
NULL |
jakékoliv | jakékoliv | jakékoliv | EINVAL |
Není změněno. |
Not NULL (odkazuje na platnou paměť) |
žádný | jakékoliv | jakékoliv | EINVAL |
Není změněno. |
Not NULL (odkazuje na platnou paměť) |
jakékoliv | jakékoliv | >= sizeInBytes |
EINVAL |
Není změněno. |
Problémy se zabezpečením
_gcvt_s
může vygenerovat narušení přístupu, pokud buffer
neodkazuje na platnou paměť a není NULL
.
Poznámky
Funkce _gcvt_s
převede plovoucí desetinnou čárku value
na řetězec znaků (který zahrnuje desetinnou čárku a možný bajt znaménka) a uloží řetězec do buffer
. buffer
měla by být dostatečně velká, aby vyhovovala převedené hodnotě plus ukončující znak null, který se připojí automaticky. Vyrovnávací paměť délky _CVTBUFSIZE
je dostatečná pro libovolnou hodnotu s plovoucí desetinou čárkou. Pokud se použije velikost digits
vyrovnávací paměti + 1, funkce nepřepíše konec vyrovnávací paměti, proto nezapomeňte zadat dostatečnou vyrovnávací paměť pro tuto operaci. _gcvt_s
se pokusí vytvořit digits
číslice v desítkovém formátu. Pokud to nejde, vytvoří digits
číslice v exponenciálním formátu. Koncové nuly lze v převodu potlačit.
V jazyce C++ je použití této funkce zjednodušeno přetížením šablony; přetížení může odvodit délku vyrovnávací paměti automaticky, čímž eliminuje nutnost zadat argument velikosti. Další informace naleznete v tématu Přetížení šablon zabezpečení.
Ladicí verze této funkce nejprve vyplní vyrovnávací paměť 0xFE. Chcete-li toto chování zakázat, použijte _CrtSetDebugFillThreshold
.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Požadavky
Rutina | Požadovaný hlavičkový soubor | Volitelné záhlaví |
---|---|---|
_gcvt_s |
<stdlib.h> | <error.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// crt_gcvt_s.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main()
{
char buf[_CVTBUFSIZE];
int decimal;
int sign;
int err;
err = _gcvt_s(buf, _CVTBUFSIZE, 1.2, 5);
if (err != 0)
{
printf("_gcvt_s failed with error code %d\n", err);
exit(1);
}
printf("Converted value: %s\n", buf);
}
Converted value: 1.2
Viz také
Konverze dat
Podpora pro matematiku a plovoucí desetinou čárku
atof
, _atof_l
, , _wtof
_wtof_l
_ecvt_s
_fcvt_s
_gcvt