sprintf
, _sprintf_l
, swprintf
, , _swprintf
, _swprintf_l
, __swprintf_l
Biçimlendirilmiş verileri bir dizeye yazın. Bu işlevlerden bazılarının daha güvenli sürümleri mevcuttur; bkz. sprintf_s
, _sprintf_s_l
, swprintf_s
. _swprintf_s_l
ve _swprintf_l
öğesinin swprintf
güvenli sürümleri, arabellek boyutunu parametre olarak alır.
Sözdizimi
int sprintf(
char *buffer,
const char *format [,
argument] ...
);
int _sprintf_l(
char *buffer,
const char *format,
_locale_t locale [,
argument] ...
);
int swprintf(
wchar_t *buffer,
size_t count,
const wchar_t *format [,
argument]...
);
int _swprintf(
wchar_t *buffer,
const wchar_t *format [,
argument]...
);
int _swprintf_l(
wchar_t *buffer,
size_t count,
const wchar_t *format,
_locale_t locale [,
argument] ...
);
int __swprintf_l(
wchar_t *buffer,
const wchar_t *format,
_locale_t locale [,
argument] ...
);
template <size_t size>
int sprintf(
char (&buffer)[size],
const char *format [,
argument] ...
); // C++ only
template <size_t size>
int _sprintf_l(
char (&buffer)[size],
const char *format,
_locale_t locale [,
argument] ...
); // C++ only
Parametreler
buffer
Çıktı için depolama konumu
count
Bu işlevin Unicode sürümünde saklanacak karakter sayısı üst sınırı.
format
Biçim denetimi dizesi
argument
İsteğ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. Veya format
null bir işaretçiysebuffer
, parametre doğrulamasında 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
.
sprintf
, sonlandırıcı null karakteri saymamak için içinde buffer
depolanan bayt sayısını döndürür. swprintf
, içinde depolanan buffer
geniş karakterlerin sayısını döndürür, null geniş karakteri sonlandırmayı saymaz.
Açıklamalar
İşlev, sprintf
içinde bir dizi karakteri ve değeri biçimlendirip depolar buffer
. Her argument
(varsa) dönüştürülür ve içindeki format
ilgili biçim belirtimine göre çıkış yapılır. Biçim sıradan karakterlerden oluşur ve için printf
bağımsız değişkenle aynı biçime ve işleve format
sahiptir. Yazılan son karakterden sonra null karakter eklenir. Çakışan dizeler arasında kopyalama olursa davranış tanımsızdır.
Önemli
kullanarak sprintf
, yazılan karakter sayısını sınırlamanın bir yolu yoktur; bu, kullanan sprintf
kodun arabellek taşmalarına duyarlı olduğu anlamına gelir. öğesine yazacak buffer
en fazla karakter sayısını belirten ilgili işlevini snprintf
kullanmayı veya arabelleğin ne kadar büyük olduğunu belirlemek için kullanmayı _scprintf
göz önünde bulundurun. Ayrıca, kullanıcı tanımlı bir dize olmadığından emin olun format
.
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.
swprintf
, öğesinin sprintf
geniş karakterli bir sürümüdür; işaretçi swprintf
bağımsız değişkenleri geniş karakterli dizelerdir. içindeki swprintf
kodlama hatalarının algılanması ile sprintf
arasında farklılık gösterebilir. swprintf
ve fwprintf
türündeki bir hedef FILE
yerine bir dizeye çıkış yazma dışında swprintf
aynı şekilde davranır ve swprintf
yazılacak en fazla karakter sayısını belirtmek için parametresini gerektirircount
. 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.
için imza swprintf
standartlaştırılmadan önce, karakter sayısı parametresini almayan eski bir Microsoft C çalışma zamanı kitaplığında gönderilen bir sürüm. Eski sürüm Microsoft C çalışma zamanı kitaplığında hala kullanılabilir, ancak kullanım dışıdır ve yeniden adlandırılmıştır _swprintf()
. Eski imzaya göre yazılmış olan kod için, çağrısının ile swprintf
_swprintf
eşlendiği öğesini tanımlayın_CRT_NON_CONFORMING_SWPRINTFS
. Gelecekteki bir sürümde eski davranış kaldırılabilir, bu nedenle kod yeni uyumlu davranışı kullanacak şekilde değiştirilmelidir.
C++ dilinde, bu işlevlerin daha yeni ve güvenli karşılıklarını çağıran şablon aşırı yüklemeleri vardır. Daha fazla bilgi için bkz . Güvenli şablon aşırı yüklemeleri.
Genel metin yordamı eşlemeleri
TCHAR.H olağan |
_UNICODE ve _MBCS tanımlanmadı |
_MBCS tanımlanan |
_UNICODE tanımlanan |
---|---|---|---|
_stprintf |
sprintf |
sprintf |
_swprintf |
_stprintf_l |
_sprintf_l |
_sprintf_l |
__swprintf_l |
Gereksinimler
Yordam | Gerekli başlık |
---|---|
sprintf , _sprintf_l |
<stdio.h> |
swprintf , _swprintf , _swprintf_l |
<stdio.h> veya <wchar.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek: Verileri biçimlendirmek için kullanın sprintf
// crt_sprintf.c
// compile with: /W3
// This program uses sprintf 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( buffer, " String: %s\n", s ); // C4996
j += sprintf( buffer + j, " Character: %c\n", c ); // C4996
j += sprintf( buffer + j, " Integer: %d\n", i ); // C4996
j += sprintf( buffer + j, " Real: %f\n", fp );// C4996
// Note: sprintf is deprecated; consider using sprintf_s instead
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.c
// wide character example
// also demonstrates swprintf returning error code
#include <stdio.h>
int main( void )
{
wchar_t buf[100];
int len = swprintf( buf, 100, L"%s", L"Hello world" );
printf( "wrote %d characters\n", len );
len = swprintf( buf, 100, L"%s", L"Hello\xffff world" );
// swprintf fails because string contains WEOF (\xffff)
printf( "wrote %d characters\n", len );
}
wrote 11 characters
wrote -1 characters
Ayrıca bkz.
Akış G/Ç
fprintf
, _fprintf_l
, fwprintf
, _fwprintf_l
printf
, _printf_l
, wprintf
, _wprintf_l
scanf
, _scanf_l
, wscanf
, _wscanf_l
sscanf
, _sscanf_l
, swscanf
, _swscanf_l
vprintf
işlevleri