_gcvt_s
Konvertiert eine Gleitkommazahl in eine Zeichenfolge.Dies ist eine Version von _gcvt mit unter Security Enhancements, wie in Sicherheitsfeatures im CRTbeschrieben.
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
Parameter
[out] buffer
Puffer, in dem das Ergebnis der Konvertierung zu speichern.[in] sizeInBytes
Größe des Puffers.[in] value
Der zu konvertierende Wert.[in] digits
Anzahl der signifikanten Ziffern gespeichert.
Rückgabewert
Beliebige wenn der Vorgang erfolgreich war.Wenn ein Fehler aufgrund eines ungültigen Parameters (finden Sie in der folgenden Tabelle für ungültige Werte), ungültige Parameter auftritt, wird der Ereignishandler aufgerufen, wie in Parametervalidierungbeschrieben.Wenn die Ausführung zulässig ist, um fortzufahren, wird ein Fehlercode zurückgegeben.Fehlercodes werden in Errno.h definiert.Eine Liste dieser Fehler ausgelöst wird, finden Sie unter errno, _doserrno, _sys_errlist und _sys_nerr.
Fehlerbedingungen
buffer |
sizeInBytes |
value |
digits |
Return |
Wert in buffer |
---|---|---|---|---|---|
NULL |
alle |
alle |
alle |
EINVAL |
Nicht geändert. |
Nicht NULL (Zeigt auf den gültigen Arbeitsspeicher) |
0 (Null) |
alle |
alle |
EINVAL |
Nicht geändert. |
Nicht NULL (Zeigt auf den gültigen Arbeitsspeicher) |
alle |
alle |
>= sizeInBytes |
EINVAL |
Nicht geändert. |
Sicherheitsprobleme
_gcvt_s kann eine Zugriffsverletzung generiert wird, sobald buffer sich nicht auf den gültigen Arbeitsspeicher wird und nicht NULList.
Hinweise
Die _gcvt_s-Funktion value float konvertiert in eine Zeichenfolge und ein Dezimaltrennzeichen (byte) umfasst ein beliebiges Zeichen und speichert die Zeichenfolge in buffer.buffer muss groß genug sein, den konvertierten Wert NULL aufweist, das ein positiver automatisch angefügt wird.Ein Puffer der Länge _CVTBUFSIZE ist für jeden Gleitkommawert ausreichend.Wenn eine Puffergröße von digits + 1 verwendet wird, überschreibt die Funktion nicht das Ende des Puffers. Dies ist darauf, einen ausreichenden Puffer für diesen Vorgang zu erzeugen._gcvt_s versucht, digits Ziffern im Dezimalformat zu erzeugen.Wenn dies nicht darf, erzeugt er digits Ziffern im exponentiellen Format.Nachgestellte Nullen können in der Konvertierung unterdrückt werden.
In C++ unter Verwendung dieser Funktion wird durch eine Vorlagen Überladung vereinfacht. Überladung kann die Pufferlänge automatisch ableiten, und die Anforderung ein Größen - Argument angegeben wird.Weitere Informationen finden Sie unter Speichern Sie Vorlagen-Überladungen.
Die Debugversion dieser Funktion wird zuerst den Puffer mit 0xFD aus.Um dieses Verhalten zu deaktivieren, verwenden Sie _CrtSetDebugFillThreshold.
Anforderungen
Routine |
Erforderlicher Header |
Optionaler Header |
---|---|---|
_gcvt_s |
<stdlib.h> |
<error.h> |
Weitere Informationen finden Sie unter Kompatibilität Kompatibilität in der Einführung.
Beispiel
// 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);
}