_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 format
ilgili biçim belirtimine göre çıkış yapılır. bağımsız değişkeni ve format
wprintf
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_p
geniş 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_p
algılamadan farklı olabilir. _swprintf_p
ve fwprintf_p
türündeki bir hedef FILE
yerine 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 buffer
depolanan bayt sayısını döndürür. _swprintf_p
, içinde depolanan buffer
geniş 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 EINVAL
ayarlanı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 fesetround
ayarlanan 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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin