vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l
Bir bağımsız değişkenler listesindeki bir işaretçi kullanarak biçimlendirilmiş çıktı yaz.Bu işlevler daha güvenli sürümlerinin kullanılabilir olduğunu; see vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l.
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],
size_t count,
const wchar_t *format,
va_list argptr
); // C++ only
template <size_t size>
int _vswprintf_l(
wchar_t (&buffer)[size],
size_t count,
const wchar_t *format,
locale_t locale,
va_list argptr
); // C++ only
Parametreler
buffer
Çıkış için depolama konumu.count
En fazla olarak depolamak için karakter sayısı UNICODE bu işlev sürümü.format
Biçim belirtimi.argptr
Bağımsız değişkenler listesi için işaretçi.locale
Kullanılacak yerel ayarı.
Dönüş Değeri
vsprintfve vswprintf çıkış hata oluşursa ve sondaki boş karakter ya da negatif bir değer içermeyen yazılan karakterlerin sayısını döndürür.buffer Veya format bir null işaretçi açıklandığı gibi bu işlevleri geçersiz parametre işleyicisi çağırmak Parametre doğrulama.Yürütülmesine devam etmek için izin verilmişse, bu işlevler -1 geri dönün ve errno için EINVAL.
Bunlar ve diğer hata kodları hakkında daha fazla bilgi için bkz: _doserrno, errno, _sys_errlist ve _sys_nerr.
Notlar
Bu işlevlerden her biri bir bağımsız değişken listesi için bir işaretçi alır ve sonra biçimlendirir ve belirli verilere göre sıralanmasını bellek Yazar buffer.
Bu işlevler ile sürümlerini _l soneki yerine geçerli iş parçacığı yerel geçirilen yerel parametresi kullandıkları dışında aynı.
Güvenlik Notu |
---|
Kullanarak vsprintf, burada kod bu işlevi kullanmak için arabellek taşmaları açıktır yani karakter sayısını sınırlamak için hiçbir şekilde yazılır.Use _vsnprintf bunun yerine veya arama _vscprintf ne kadar büyük bir arabellek gerekli belirlemek için.Ayrıca, emin format kullanıcı tanımlı bir dize değil.Daha fazla bilgi için bkz: Önleme arabelleğin taşmasına neden. |
vswprintfISO c ikinci parametre gerektiren standart, uyan count, tür size_t.Eski standart dışı davranışı zorlamak için tanımladığınız _CRT_NON_CONFORMING_SWPRINTFS. kod yeni uyumluluğunu davranışı kullanmak için değiştirilmesi gereken şekilde eski davranış gelecekteki bir sürümüne olmayabilir.
C++'da, bu işlevlerin daha yeni ve güvenli karşılıkları çağırmak şablon aşırı bu işlevleri vardır.Daha fazla bilgi için bkz. Güvenli şablon aşırı yükleme.
Genel metin yordamı eşlemeleri
TCHAR.H yordamına girildi |
_UNICODE & _mbcs tanımlı değil |
Tanımlanan _mbcs |
Tanımlanan _UNICODE |
---|---|---|---|
_vstprintf |
vsprintf |
vsprintf |
vswprintf |
_vstprintf_l |
_vsprintf_l |
_vsprintf_l |
_vswprintf_l |
Gereksinimler
Yordamı |
Gerekli başlık |
İsteğe bağlı üstbilgileri |
---|---|---|
vsprintf, _vsprintf_l |
<stdio.h> ve <stdarg.h> |
<varargs.h> * |
vswprintf, _vswprintf_l |
<stdio.h> ya da <wchar.h> ve <stdarg.h> |
<varargs.h> * |
* UNIX v uyumluluk için gereklidir.
Ek uyumluluk bilgileri için bkz: Uyumluluk giriş.
Örnek
// crt_vsprintf.c
// compile with: /W3
// This program uses vsprintf to write to a buffer.
// The size of the buffer is determined by _vscprintf.
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
void test( char * 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) );
vsprintf( buffer, format, args ); // C4996
// Note: vsprintf is deprecated; consider using vsprintf_s instead
puts( buffer );
free( buffer );
}
int main( void )
{
test( "%d %c %d", 123, '<', 456 );
test( "%s", "This is a string" );
}
.NET Framework Eşdeğeri
Ayrıca bkz.
Başvuru
Biçim Belirtim Sözdizimi: printf ve wprintf İşlevleri
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l