_ecvt_s
Konvertiert eine double
-Zahl in eine Zeichenfolge. Diese Funktion ist eine Version von _ecvt
Sicherheitsverbesserungen, wie in den Sicherheitsfeatures im CRT beschrieben.
Syntax
errno_t _ecvt_s(
char * buffer,
size_t sizeInBytes,
double value,
int count,
int *dec,
int *sign
);
template <size_t size>
errno_t _ecvt_s(
char (&buffer)[size],
double value,
int count,
int *dec,
int *sign
); // C++ only
Parameter
buffer
Wird mit dem Zeiger auf die Zeichenfolge mit Ziffern aufgefüllt, die sich aus der Konvertierung ergeben.
sizeInBytes
Größe des -Puffers in Byte.
value
Zu konvertierende Zahl.
count
Anzahl der gespeicherten Ziffern.
dec
Gespeicherte Position der Dezimalstelle.
sign
Vorzeichen der konvertierten Zahl.
Rückgabewert
Null, wenn erfolgreich. Der Rückgabewert ist ein Fehlercode, falls ein Fehler auftritt. Fehlercodes sind in Errno.h definiert. Weitere Informationen finden Sie untererrno
, _doserrno
, _sys_errlist
und _sys_nerr
.
Wenn ein ungültiger Parameter vorhanden ist, wie in der folgenden Tabelle aufgeführt, ruft diese Funktion den ungültigen Parameterhandler auf, wie in der Parameterüberprüfung beschrieben. Wenn die Ausführung fortgesetzt werden darf, wird diese Funktion auf errno
EINVAL
, und gibt sie zurück EINVAL
.
Fehlerbedingungen
buffer |
sizeInBytes |
value |
count |
dec |
sign |
Rückgabewert | Wert in buffer . |
---|---|---|---|---|---|---|---|
NULL |
any | Beliebig | Beliebig | Beliebig | any | EINVAL |
Nicht geändert. |
Nicht NULL (zeigt gültigen Speicher an) |
<=0 | any | Beliebig | Beliebig | any | EINVAL |
Nicht geändert. |
any | Beliebig | Beliebig | Beliebig | NULL |
any | EINVAL |
Nicht geändert. |
any | Beliebig | Beliebig | Beliebig | any | NULL |
EINVAL |
Nicht geändert. |
Sicherheitsprobleme
_ecvt_s
kann einen Zugriffsverstoß generieren, wenn buffer
er nicht auf gültigen Speicher verweist und nicht NULL
.
Hinweise
Mit der _ecvt_s
-Funktion werden Gleitkommazahlen in Zeichenfolgen konvertiert. Der Parameter value
ist die zu konvertierende Gleitkommazahl. Mit dieser Funktion werden bis zu count
Ziffern von value
als Zeichenfolge gespeichert und das Zeichen NULL ('\0') angefügt. Wenn in value
mehr als count
Zeichen vorhanden sind, wird die untere Ziffer gerundet. Wenn weniger als count
Ziffern vorhanden sind, wird die Zeichenfolge mit Nullen aufgefüllt.
In der Zeichenfolge werden nur Ziffern gespeichert. Die Position der Dezimalstelle und das Vorzeichen von value
können nach dem Aufruf aus dec
und sign
abgerufen werden. Der Parameter dec
zeigt auf einen Integer-Wert, der die Position der Dezimalstelle im Verhältnis zum Zeichenfolgenanfang angibt. Der Wert 0 oder ein negativer Integer-Wert geben an, dass sich die Dezimalstelle links neben der ersten Ziffer befindet. Der Parameter sign
zeigt auf einn Integer-Wert, der das Vorzeichen der konvertierten Zahl angibt. Wenn der Integer-Wert 0 ist, ist die Zahl positiv. Andernfalls ist die Zahl negativ.
Ein Puffer der Länge _CVTBUFSIZE
reicht für alle Gleitkommawerte aus.
_ecvt_s
und _fcvt_s
unterscheiden sich hinsichtlich der Interpretation des Parameters count
. Von _ecvt_s
wird count
als die Gesamtanzahl der Ziffern in der Ausgabezeichenfolge interpretiert, während count
von _fcvt_s
als die Anzahl der Ziffern nach der Dezimalstelle interpretiert wird.
Die Verwendung dieser Funktion in C++ wird durch eine Vorlagenüberladung vereinfacht. Eine Überladung kann automatisch die Pufferlänge ableiten, sodass kein Größenargument angegeben werden muss. Weitere Informationen finden Sie unter Secure Template Overloads.
Die Debugversion dieser Funktion füllt zuerst den Puffer mit 0xFE. Verwenden Sie _CrtSetDebugFillThreshold
zum Deaktivieren dieses Verhaltens .
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Anforderungen
Funktion | Erforderlicher Header | Optionaler Header |
---|---|---|
_ecvt_s |
<stdlib.h> | <errno.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// ecvt_s.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main( )
{
char * buf = 0;
int decimal;
int sign;
int err;
buf = (char*) malloc(_CVTBUFSIZE);
err = _ecvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);
if (err != 0)
{
printf("_ecvt_s failed with error code %d\n", err);
exit(1);
}
printf("Converted value: %s\n", buf);
}
Converted value: 12000
Siehe auch
Datenkonvertierung
Mathematische Unterstützung und Gleitkommaunterstützung
atof
, , _atof_l
_wtof
_wtof_l
_ecvt
_fcvt_s
_gcvt_s