_gcvt_s
Konvertiert einen Gleitkommawert in eine Zeichenfolge. Dies ist eine Version von _gcvt mit werden, wie in Sicherheitsfunktionen in der CRT beschrieben.
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, um 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
Null wenn erfolgreich. Wenn ein Fehler aufgrund eines ungültigen Parameters (siehe folgende Tabelle für ungültige Werte), auftritt, wird der ungültige Parameterhandler aufgerufen, wie in Parametervalidierung beschrieben. Wenn die Ausführung zulässig ist, um fortzufahren, wird ein Fehlercode zurückgegeben. Fehlercodes werden in Errno.h definiert. Eine Liste dieser Fehler, finden Sie unter errno, _doserrno, _sys_errlist und _sys_nerr.
Fehlerbedingungen
buffer |
sizeInBytes |
value |
digits |
Return |
Wert in buffer |
---|---|---|---|---|---|
NULL |
any |
any |
any |
EINVAL |
Nicht geändert. |
Nicht NULL (Punkte zum gültigen Arbeitsspeicher) |
0 (Null) |
any |
any |
EINVAL |
Nicht geändert. |
Nicht NULL (Punkte zum gültigen Arbeitsspeicher) |
any |
any |
>= sizeInBytes |
EINVAL |
Nicht geändert. |
Sicherheitsprobleme
_gcvt_s kann eine Zugriffsverletzung generiert, wenn buffer nicht auf gültigen Arbeitsspeicher wird und nicht NULL ist.
Hinweise
Die _gcvt_s-Funktion konvertiert ein Gleitkommawert value als Zeichenfolge (die ein Dezimaltrennzeichen und ein beliebiges Zeichenbyte enthält) und die Zeichenfolge in buffer. buffer sollte so groß sein, den konvertierten Wert sowie ein NULL anzupassen, das 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, daher ist sicher, einen ausreichenden Puffer für diesen Vorgang bereitzustellen. _gcvt_s versucht, digits Ziffern im Dezimalformat zu erzeugen. Wenn das nicht der Fall ist, erzeugt es digits Ziffern im exponentiellen Format. Nachfolgende Nullen in der Konvertierung können unterdrückt werden.
In C++ unter Verwendung dieser Funktion wird durch eine Vorlagenüberladung vereinfacht; Überladung kann automatisch die Pufferlänge ableiten und die Anforderung nicht, einen Größenargument anzugeben. Weitere Informationen finden Sie unter Sichere Vorlagenüberladungen.
Die Debugversion dieser Funktion wird zuerst den Puffer mit 0xFD aus. Mit _CrtSetDebugFillThreshold deaktivieren Sie dieses Verhalten.
Anforderungen
Routine |
Erforderlicher Header |
Optionaler Header |
---|---|---|
_gcvt_s |
<stdlib.h> |
<error.h> |
Weitere Informationen zur Kompatibilität finden Sie unter 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);
}