Aracılığıyla paylaş


_sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l

Parametrelerin biçim dizesinde kullanılacağı sırayı belirterek biçimlendirilmiş verileri bir dizeye yazın.

Sözdizimi

int _sprintf_p(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format [,
   argument_list]
);
int _sprintf_p_l(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format,
   _locale_t locale [,
   argument_list]
);
int _swprintf_p(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format [,
   argument_list]
);
int _swprintf_p_l(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format,
   _locale_t locale [,
   argument_list]
);

Parametreler

buffer
Çıkış için Depolama konum

sizeOfBuffer
Depolanacak maksimum karakter sayısı.

format
Biçim denetimi dizesi.

argument_list
Biçim dizesi için isteğe bağlı bağımsız değişkenler.

locale
Kullanılacak yerel ayar.

Daha fazla bilgi için bkz . Biçim belirtimi söz dizimi.

Dönüş değeri

Yazılan karakter sayısı veya hata oluştuysa -1.

Açıklamalar

İşlev, _sprintf_p içinde bir dizi karakteri ve değeri biçimlendirip depolar buffer. içindeki argument_list her bağımsız değişken (varsa) dönüştürülür ve içindeki formatilgili biçim belirtimine göre çıkış yapılır. bağımsız değişkeni ve formatwprintf işlevleri için printf biçim belirtimi söz dizimini kullanır. Yazılan son karakterden sonra null karakter eklenir. Çakışan dizeler arasında kopyalama olursa davranış tanımsızdır. ile sprintf_s arasındaki _sprintf_p fark, _sprintf_p biçim dizesinde bağımsız değişkenlerin hangi sırada kullanılacağının belirtilmesine olanak tanıyan konumsal parametreleri desteklemesidir. Daha fazla bilgi için bkz printf_p . Konumsal Parametreler.

_swprintf_p , öğesinin _sprintf_pgeniş karakterli bir sürümüdür; işaretçi _swprintf_p bağımsız değişkenleri geniş karakterli dizelerdir. içindeki _swprintf_p kodlama hatalarının algılanması, içindeki _sprintf_palgılamadan farklı olabilir. _swprintf_pve fwprintf_p türündeki bir hedef FILEyerine bir dizeye çıktı yazması dışında _swprintf_p aynı şekilde davranır ve _swprintf_p parametrenin count yazılacak en fazla karakter sayısını belirtmesini gerektirir. Bu işlevlerin sonekli _l sürümleri aynıdır, ancak geçerli iş parçacığı yerel ayarı yerine geçirilen yerel ayar parametresini kullanırlar.

_sprintf_p , sonlandırıcı null karakteri saymamak için içinde bufferdepolanan bayt sayısını döndürür. _swprintf_p , içinde depolanan buffergeniş karakterlerin sayısını döndürür, null geniş karakteri sonlandırmayı saymaz. Veya format null bir işaretçiyse buffer veya biçim dizesi geçersiz biçimlendirme karakterleri içeriyorsa, Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisi çağrılır. Yürütmenin devam etmesi için izin verilirse, bu işlevler -1 döndürür ve olarak EINVALayarlanırerrno.

Önemli

Windows 10 sürüm 2004 'den (derleme 19041) printf başlayarak, işlev ailesi yuvarlama için IEEE 754 kurallarına göre tam olarak temsil edilebilir kayan nokta numaraları yazdırır. Windows'un önceki sürümlerinde, '5' ile biten tam olarak temsil edilebilir kayan nokta sayıları her zaman yukarı yuvarlanırdı. IEEE 754, en yakın çift rakama ("Bankacı Yuvarlama" olarak da bilinir) yuvarlamaları gerektiğini belirtir. Örneğin, hem hem de printf("%1.0f", 1.5)printf("%1.0f", 2.5) 2'ye yuvarlanmalıdır. Daha önce 1,5 2'ye, 2,5 ise 3'e yuvarlardı. Bu değişiklik yalnızca tam olarak temsil edilebilir sayıları etkiler. Örneğin, 2,35 (bellekte temsil edildiğinde 2,3500000000000000000008'e daha yakındır) 2,4'e kadar yuvarlanmaya devam eder. Bu işlevler tarafından yapılan yuvarlama artık tarafından fesetroundayarlanan kayan nokta yuvarlama moduna da dikkat eder. Daha önce yuvarlama her zaman davranışı seçmişti FE_TONEAREST . Bu değişiklik yalnızca Visual Studio 2019 sürüm 16.2 ve üzeri kullanılarak oluşturulan programları etkiler. Eski kayan nokta yuvarlama davranışını kullanmak için 'legacy_stdio_float_rounding.obj' ile bağlantı sağlayın.

Genel metin yordamı eşlemeleri

TCHAR.H Rutin _UNICODE ve _MBCS tanımlanmadı _MBCS Tanımlanan _UNICODE Tanımlanan
_stprintf_p _sprintf_p _sprintf_p _swprintf_p
_stprintf_p_l _sprintf_p_l _sprintf_p_l _swprintf_p_l

Gereksinimler

Yordam Gerekli başlık
_sprintf_p, _sprintf_p_l <stdio.h>
_swprintf_p, _swprintf_p_l <stdio.h> veya <wchar.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek: Verileri biçimlendirmek için kullanın _sprintf_p

// crt_sprintf_p.c
// This program uses _sprintf_p to format various
// data and place them in the string named buffer.
//

#include <stdio.h>

int main( void )
{
    char     buffer[200],
            s[] = "computer", c = 'l';
    int      i = 35,
            j;
    float    fp = 1.7320534f;

    // Format and print various data:
    j  = _sprintf_p( buffer, 200,
                     "   String:    %s\n", s );
    j += _sprintf_p( buffer + j, 200 - j,
                     "   Character: %c\n", c );
    j += _sprintf_p( buffer + j, 200 - j,
                     "   Integer:   %d\n", i );
    j += _sprintf_p( buffer + j, 200 - j,
                     "   Real:      %f\n", fp );

    printf( "Output:\n%s\ncharacter count = %d\n",
            buffer, j );
}
Output:
   String:    computer
   Character: l
   Integer:   35
   Real:      1.732053

character count = 79

Örnek: Hata kodu işleme

// crt_swprintf_p.c
// This is the wide character example which
// also demonstrates _swprintf_p returning
// error code.
#include <stdio.h>

#define BUFFER_SIZE 100

int main( void )
{
    wchar_t buffer[BUFFER_SIZE];
    int     len;

    len = _swprintf_p(buffer, BUFFER_SIZE, L"%2$s %1$d",
                      0, L" marbles in your head.");
    _printf_p( "Wrote %d characters\n", len );

    // _swprintf_p fails because string contains WEOF (\xffff)
    len = _swprintf_p(buffer, BUFFER_SIZE, L"%s",
                      L"Hello\xffff world" );
    _printf_p( "Wrote %d characters\n", len );
}
Wrote 24 characters
Wrote -1 characters

Ayrıca bkz.

Akış G/Ç
_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l
fprintf, _fprintf_l, fwprintf, _fwprintf_l
_printf_p, _printf_p_l, _wprintf_p, _wprintf_p_l
printf, _printf_l, wprintf, _wprintf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
scanf, _scanf_l, wscanf, _wscanf_l
sscanf, _sscanf_l, swscanf, _swscanf_l
sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l
vprintf işlevleri
printf_p KonumSal Parametreler