Dela via


_itoa_s, _ltoa_s, _ultoa_s, _i64toa_s, _ui64toa_s, _itow_s, , _ltow_s, _ultow_s, , _i64tow_s_ui64tow_s

Konverterar ett heltal till en sträng. Dessa funktioner är versioner av _itoafunktionerna , _itow med säkerhetsförbättringar enligt beskrivningen i Säkerhetsfunktioner i CRT.

Syntax

errno_t _itoa_s( int value, char * buffer, size_t size, int radix );
errno_t _ltoa_s( long value, char * buffer, size_t size, int radix );
errno_t _ultoa_s( unsigned long value, char * buffer, size_t size, int radix );
errno_t _i64toa_s( long long value, char *buffer,
   size_t size, int radix );
errno_t _ui64toa_s( unsigned long long value, char *buffer,
   size_t size, int radix );

errno_t _itow_s( int value, wchar_t *buffer,
   size_t size, int radix );
errno_t _ltow_s( long value, wchar_t *buffer,
   size_t size, int radix );
errno_t _ultow_s( unsigned long value, wchar_t *buffer,
   size_t size, int radix );
errno_t _i64tow_s( long long value, wchar_t *buffer,
   size_t size, int radix );
errno_t _ui64tow_s( unsigned long long value, wchar_t *buffer,
   size_t size, int radix
);

// These template functions are C++ only:
template <size_t size>
errno_t _itoa_s( int value, char (&buffer)[size], int radix );

template <size_t size>
errno_t _ltoa_s( long value, char (&buffer)[size], int radix );

template <size_t size>
errno_t _ultoa_s( unsigned long value, char (&buffer)[size], int radix );

template <size_t size>
errno_t _itow_s( int value, wchar_t (&buffer)[size], int radix );

template <size_t size>
errno_t _ltow_s( long value, wchar_t (&buffer)[size], int radix );

template <size_t size>
errno_t _ultow_s( unsigned long value, wchar_t (&buffer)[size], int radix );

Parameterar

value
Tal som ska konverteras.

buffer
Utdatabuffert som innehåller resultatet av konverteringen.

size
Storleken på buffer tecken eller breda tecken.

radix
Radixet eller den numeriska bas som ska användas för att konvertera value, som måste ligga i intervallet 2–36.

Returvärde

Noll om det lyckas. en felkod vid fel. Om något av följande villkor gäller anropar funktionen en ogiltig parameterhanterare enligt beskrivningen i Parameterverifiering.

Feltillstånd

värde buffert storlek Radix Återvända
någon NULL någon någon EINVAL
någon någon <=0 någon EINVAL
någon någon <= längden på den resultatsträng som krävs någon EINVAL
någon någon någon radix < 2 eller radix> 36 EINVAL

Säkerhetsproblem

Dessa funktioner kan generera en åtkomstöverträdelse om buffer inte pekar på giltigt minne och inte NULLär , eller om längden på bufferten inte är tillräckligt lång för att innehålla resultatsträngen.

Anmärkningar

Förutom parametrarna och returvärdet har funktionsfamiljerna _itoa_s och _itow_s samma beteende som motsvarande mindre säkra _itoa och _itow versioner.

I C++ förenklas användningen av dessa funktioner av överbelastningar av mallar; Överlagringarna kan härleda buffertlängden automatiskt (vilket eliminerar behovet av att ange ett storleksargument) och de kan automatiskt ersätta äldre, icke-säkra funktioner med sina nyare, säkra motsvarigheter. För mer information, se Secure template overloads.

Felsökningsbiblioteksversionerna av dessa funktioner fyller först bufferten med 0xFE. Om du vill inaktivera det här beteendet använder du _CrtSetDebugFillThreshold.

CRT innehåller praktiska makron för att definiera storleken på bufferten som krävs för att konvertera det längsta möjliga värdet för varje heltalstyp, inklusive null-avslutaren och teckentecknet, för flera vanliga baser. Mer information finns i Makron för maximalt antal konverteringar.

Som standard är den här funktionens globala tillstånd begränsat till programmet. Information om hur du ändrar det här beteendet finns i Globalt tillstånd i CRT.

Allmän textrutinmappning

Tchar.h rutin _UNICODE och _MBCS inte definierat _MBCS definierad _UNICODE definierad
_itot_s _itoa_s _itoa_s _itow_s
_ltot_s _ltoa_s _ltoa_s _ltow_s
_ultot_s _ultoa_s _ultoa_s _ultow_s
_i64tot_s _i64toa_s _i64toa_s _i64tow_s
_ui64tot_s _ui64toa_s _ui64toa_s _ui64tow_s

Kravspecifikation

Rutin Obligatoriskt huvud
_itoa_s, _ltoa_s, _ultoa_s, , , _i64toa_s_ui64toa_s <stdlib.h>
_itow_s, _ltow_s, _ultow_s, , , _i64tow_s_ui64tow_s <stdlib.h> eller <wchar.h>

Dessa funktioner är Microsoft-specifika. Mer kompatibilitetsinformation finns i Kompatibilitet.

Exempel

Det här exemplet visar användningen av några av heltalskonverteringsfunktionerna. Makrot _countof fungerar bara för att fastställa buffertstorleken när matrisdeklarationen är synlig för kompilatorn och inte för parametrar som har förfallit till pekare.

// crt_itoa_s.c
// Compile by using: cl /W4 crt_itoa_s.c
#include <stdlib.h>     // for _itoa_s functions, _countof, count macro
#include <stdio.h>      // for printf
#include <string.h>     // for strnlen

int main( void )
{
    char buffer[_MAX_U64TOSTR_BASE2_COUNT];
    int r;
    for ( r = 10; r >= 2; --r )
    {
        _itoa_s( -1, buffer, _countof(buffer), r );
        printf( "base %d: %s (%d chars)\n",
            r, buffer, strnlen(buffer, _countof(buffer)) );
    }
    printf( "\n" );
    for ( r = 10; r >= 2; --r )
    {
        _i64toa_s( -1LL, buffer, _countof(buffer), r );
        printf( "base %d: %s (%d chars)\n",
            r, buffer, strnlen(buffer, _countof(buffer)) );
    }
    printf( "\n" );
    for ( r = 10; r >= 2; --r )
    {
        _ui64toa_s( 0xffffffffffffffffULL, buffer, _countof(buffer), r );
        printf( "base %d: %s (%d chars)\n",
            r, buffer, strnlen(buffer, _countof(buffer)) );
    }
}
base 10: -1 (2 chars)
base 9: 12068657453 (11 chars)
base 8: 37777777777 (11 chars)
base 7: 211301422353 (12 chars)
base 6: 1550104015503 (13 chars)
base 5: 32244002423140 (14 chars)
base 4: 3333333333333333 (16 chars)
base 3: 102002022201221111210 (21 chars)
base 2: 11111111111111111111111111111111 (32 chars)

base 10: -1 (2 chars)
base 9: 145808576354216723756 (21 chars)
base 8: 1777777777777777777777 (22 chars)
base 7: 45012021522523134134601 (23 chars)
base 6: 3520522010102100444244423 (25 chars)
base 5: 2214220303114400424121122430 (28 chars)
base 4: 33333333333333333333333333333333 (32 chars)
base 3: 11112220022122120101211020120210210211220 (41 chars)
base 2: 1111111111111111111111111111111111111111111111111111111111111111 (64 chars)

base 10: 18446744073709551615 (20 chars)
base 9: 145808576354216723756 (21 chars)
base 8: 1777777777777777777777 (22 chars)
base 7: 45012021522523134134601 (23 chars)
base 6: 3520522010102100444244423 (25 chars)
base 5: 2214220303114400424121122430 (28 chars)
base 4: 33333333333333333333333333333333 (32 chars)
base 3: 11112220022122120101211020120210210211220 (41 chars)
base 2: 1111111111111111111111111111111111111111111111111111111111111111 (64 chars)

Se även

Datakonvertering
_itoa, _itow funktioner