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.
Bağımsız değişkenler listesine bir işaretçi kullanarak biçimlendirilmiş çıktı yazın. Bu işlevlerin daha güvenli sürümleri mevcuttur; bkz. vsprintf_s, _vsprintf_s_l, vswprintf_s. _vswprintf_s_l
Sözdizimi
int vsprintf(
char *buffer,
const char *format,
va_list argptr
);
int _vsprintf_l(
char *buffer,
const char *format,
_locale_t locale,
va_list argptr
);
int vswprintf(
wchar_t *buffer,
size_t count,
const wchar_t *format,
va_list argptr
);
int _vswprintf_l(
wchar_t *buffer,
size_t count,
const wchar_t *format,
_locale_t locale,
va_list argptr
);
int __vswprintf_l(
wchar_t *buffer,
const wchar_t *format,
_locale_t locale,
va_list argptr
);
template <size_t size>
int vsprintf(
char (&buffer)[size],
const char *format,
va_list argptr
); // C++ only
template <size_t size>
int _vsprintf_l(
char (&buffer)[size],
const char *format,
_locale_t locale,
va_list argptr
); // C++ only
template <size_t size>
int vswprintf(
wchar_t (&buffer)[size],
const wchar_t *format,
va_list argptr
); // C++ only
template <size_t size>
int _vswprintf_l(
wchar_t (&buffer)[size],
const wchar_t *format,
_locale_t locale,
va_list argptr
); // C++ only
Parametreler
buffer
Çıktı için depolama konumu.
count
Bu işlevin geniş dizeli sürümlerinde saklanacak maksimum karakter sayısı.
format
Biçim belirtimi.
argptr
Bağımsız değişkenler listesinin işaretçisi.
locale
Kullanılacak yerel ayar.
Dönüş değeri
vsprintf ve vswprintf sonlandırıcı karakter hariç yazılan karakter sayısını veya bir çıktı hatası oluşursa negatif bir değer döndürün NULL . Bir işaretçi ise buffer veya format bir NULL işaretçiyse, bu işlevler Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisini çağırır. Yürütmenin devam etmesine izin verilirse, bu işlevler -1 döndürür ve olarak errnoayarlanırEINVAL.
Eğer buffer bir NULL işaretçiyse ve count sıfırsa, vswprintf_vswprintf_l sonlandıran NULL hariç yazılacak karakter sayısını döndürün.
Geçerliyse ve buffer sıfırsa count ve vswprintf -1 döndürün_vswprintf_l. İçeriği buffer değişmedi.
Bu ve diğer hata kodları hakkında daha fazla bilgi için bkz. errno_doserrno, , _sys_errlistve _sys_nerr.
Açıklamalar
Bu işlevlerin her biri, bir bağımsız değişken listesine bir işaretçi alır ve ardından verilen verileri biçimlendirir ve tarafından işaret edilen bufferbelleğe yazar.
Bu işlevlerin soneke _l sahip sürümleri, geçerli iş parçacığı yerel ayarı yerine geçirilen yerel ayar parametresini kullanmaları dışında aynıdır.
Önemli
öğesini kullanarak vsprintf, yazılan karakter sayısını sınırlamanın bir yolu yoktur, bu da bu işlevi kullanan kodun arabellek taşmalarına karşı duyarlı olduğu anlamına gelir. Bunun yerine kullanın _vsnprintf veya ne kadar büyük bir arabellek gerektiğini belirlemek için arayın _vscprintf . Ayrıca, bunun format kullanıcı tanımlı bir dize olmadığından emin olun. Daha fazla bilgi için bkz . Arabellek taşmalarından kaçınma.
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.
vswprintf, tipi countikinci parametreyi size_tgerektiren ISO C Standardına uygundur. Eski standart olmayan davranışı zorlamak için tanımlayın _CRT_NON_CONFORMING_SWPRINTFS. Eski davranış gelecekteki bir sürümde olmayabilir, bu nedenle kodun yeni uyumlu davranışı kullanacak şekilde değiştirilmesi gerekir.
C++'da bu işlevler, bu işlevlerin daha yeni ve güvenli karşılıklarını çağıran şablon aşırı yüklemelerine sahiptir. 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 |
|---|---|---|---|
_vstprintf |
vsprintf |
vsprintf |
vswprintf |
_vstprintf_l |
_vsprintf_l |
_vsprintf_l |
_vswprintf_l |
Gereksinimler
| Rutin | Gerekli başlık | İsteğe bağlı üst bilgiler |
|---|---|---|
vsprintf, _vsprintf_l |
<stdio.h> ve <stdarg.h> |
<varargs.h>* |
vswprintf, _vswprintf_l |
<stdio.h> veya <wchar.h>, ve <stdarg.h> |
<varargs.h>* |
* UNIX V uyumluluğu için gereklidir.
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// crt_vsprintf.c
// compile with: cl /W4 crt_vsprintf.c
// This program uses vsprintf to write to a buffer.
// The size of the buffer is determined by _vscprintf.
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
void test( char const * const format, ... )
{
va_list args;
int len;
char *buffer;
// retrieve the variable arguments
va_start( args, format );
len = _vscprintf( format, args ) // _vscprintf doesn't count
+ 1; // terminating '\0'
buffer = (char*)malloc( len * sizeof(char) );
if ( 0 != buffer )
{
vsprintf( buffer, format, args ); // C4996
// Note: vsprintf is deprecated; consider using vsprintf_s instead
puts( buffer );
free( buffer );
}
va_end( args );
}
int main( void )
{
test( "%d %c %d", 123, '<', 456 );
test( "%s", "This is a string" );
}
123 < 456
This is a string
Ayrıca bakınız
Akış G/Ç
vprintf işlevleri
Biçim belirtimi sözdizimi: printf ve wprintf işlevler
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
sprintf, _sprintf_l, swprintf, , _swprintf_l__swprintf_l
va_arg, va_copy, va_end, va_start