Freigeben über


_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, wenn ein Fehler auftritt. Fehlercodes sind in Errno.h definiert. Weitere Informationen finden Sie untererrno, _doserrno, _sys_errlistund _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 errnoEINVAL, und gibt sie zurück EINVAL.

Fehlerbedingungen

buffer sizeInBytes value count dec sign Rückgabewert Wert in buffer.
NULL Beliebig Beliebig Beliebig Beliebig Beliebig EINVAL Nicht geändert.
Nicht NULL (zeigt gültigen Speicher an) <=0 Beliebig Beliebig Beliebig Beliebig EINVAL Nicht geändert.
Beliebig Beliebig Beliebig Beliebig NULL Beliebig EINVAL Nicht geändert.
Beliebig Beliebig Beliebig Beliebig Beliebig 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 "Sichere Vorlagenüberladungen".

Die Debugversion dieser Funktion füllt zuerst den Puffer mit 0xFE. Verwenden Sie _CrtSetDebugFillThresholdzum Deaktivieren dieses Verhaltens .

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the 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 und Gleitkommaunterstützung
atof, _atof_l, _wtof, _wtof_l
_ecvt
_fcvt_s
_gcvt_s