Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 öğesinin _swprintf_l 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 buffer null bir işaretçiyseformat, 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 errnoayarlanırEINVAL.
sprintf , sonlandırıcı null karakteri saymamak için içinde bufferdepolanan bayt sayısını döndürür.
swprintf , içinde depolanan buffergeniş 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 formatilgili biçim belirtimine göre çıkış yapılır. Biçim sıradan karakterlerden oluşur ve için formatbağımsız değişkenle aynı biçime ve işleve printf 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 snprintfen fazla karakter sayısını belirten ilgili işlevini bufferkullanmayı 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 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 ile legacy_stdio_float_rounding.objbağlayın.
swprintf , öğesinin sprintfgeniş 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 sprintfarasında farklılık gösterebilir.
swprintfve fwprintf türündeki bir hedef swprintfyerine bir dizeye çıkış yazma dışında FILE 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 _CRT_NON_CONFORMING_SWPRINTFSswprintfeşlendiği öğesini tanımlayın_swprintf. 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