vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l
Bağımsız değişkenler listesi için bir işaretçi kullanarak biçimlendirilmiş çıktı yazma.Bu vsnprintf, _vsnprintf, _vsnprintf_l, _vsnwprintf, _vsnwprintf_l sürümlerinde CRT'deki Güvenlik Özellikleri içinde açıklandığı gibi güvenlik geliştirmeleri mevcut olabilir.
int vsnprintf_s(
char *buffer,
size_t sizeOfBuffer,
size_t count,
const char *format,
va_list argptr
);
int _vsnprintf_s(
char *buffer,
size_t sizeOfBuffer,
size_t count,
const char *format,
va_list argptr
);
int _vsnprintf_s_l(
char *buffer,
size_t sizeOfBuffer,
size_t count,
const char *format,
locale_t locale,
va_list argptr
);
int _vsnwprintf_s(
wchar_t *buffer,
size_t sizeOfBuffer,
size_t count,
const wchar_t *format,
va_list argptr
);
int _vsnwprintf_s_l(
wchar_t *buffer,
size_t sizeOfBuffer,
size_t count,
const wchar_t *format,
locale_t locale,
va_list argptr
);
template <size_t size>
int _vsnprintf_s(
char (&buffer)[size],
size_t count,
const char *format,
va_list argptr
); // C++ only
template <size_t size>
int _vsnwprintf_s(
wchar_t (&buffer)[size],
size_t count,
const wchar_t *format,
va_list argptr
); // C++ only
Parametreler
buffer
Çıktı için depolama konumu.sizeOfBuffer
Boyutunu buffer karakter sayısı olarak çıktı.count
(Sonunda boş hariç) yazmak için karakter sayısı üst sınırı veya _TRUNCATE.format
Biçim belirtimi.argptr
Bağımsız değişkenler listesine işaretçi.locale
Kullanılacak yerel ayar.
Daha fazla bilgi için bkz. Biçim Belirtimleri.
Dönüş Değeri
vsnprintf_s,_vsnprintf_s ve _vsnwprintf_s çıktı hata oluşursa sonunda boş ya da negatif bir değer içermeyen yazılan karakterlerin sayısını döndürür.vsnprintf_saynı _vsnprintf_s.vsnprintf_suyumluluk için kullanılan ANSI standardına eklenmiştir._vnsprintfGeriye dönük uyumluluk için korunur.
Sonunda boş veri saklamak için gerekli depolama aşarsa sizeOfBuffer, açıklandığı gibi geçersiz bir parametre işleyicisi çağrılır Parametre Doğrulama, sürece count olan _TRUNCATE, durumda dize kadar gibi uygun buffer yazılır ve -1 döner.Sonra geçersiz parametre işleyicinin yürütülmesine devam edilirse, bu işlevler kümesi buffer boş bir dizeye ayarlanmış errno için ERANGEve -1 döndürür.
Varsa buffer veya format olan bir NULL işaretçisi veya count daha az veya eşit sıfır olarak geçersiz parametre işleyicisi çağrılır.Yürütmenin devam etmesine izin verilirse bu işlevler errno öğesini EINVAL olarak ayarlar ve -1 döndürür.
Hata Durumları
Condition |
Return |
errno |
---|---|---|
bufferdeğil NULL |
-1 |
EINVAL |
formatdeğil NULL |
-1 |
EINVAL |
count <= 0 |
-1 |
EINVAL |
sizeOfBuffertoo small (and count != _TRUNCATE) |
-1 (ve buffer boş bir dizeye ayarlayın) |
ERANGE |
Notlar
Bu işlevlerden her biri için bir bağımsız değişken listesi bir işaretçi alır sonra biçimlendirir ve en çok yazar count tarafından verilen verileri belleğe karakteri işaret için buffer ve sonunda boş ekler.
Yoksa count olan _TRUNCATE, büyük bir kısmını dizeyi uygun şekilde bu işlevleri yazabilirsiniz sonra buffer sonunda boş yer bırakarak sırasında.Tüm dize (sonunda boş) sığıyorsa buffer, sonra da bu işlevler (sonunda boş hariç) yazılmış; karakter sayısını döndürür Aksi takdirde, bu işlevler, kesme oluştu belirtmek için -1 döndürür.
_l sonekine sahip bu işlevlerin sürümleri, geçerli iş parçacığı yerel ayarı yerine iletilen yerel ayar parametresini kullanmalarıdır.
Güvenlik Notu |
---|
format öğesinin bir kullanıcı tanımlı dize olmadığından emin olun.Daha fazla bilgi için, bkz. Arabellek Taşmalarını Önleme. |
[!NOT]
Sonunda boş yer olduğundan emin olmak için emin olun count arabellek uzunluğu veya kullanım kesinlikle küçük olan _TRUNCATE.
C++ dilinde bu işlevleri kullanmak şablon aşırı yüklemeleriyle basitleştirilmiştir; aşırı yüklemeler arabellek uzunluğunu otomatik olarak çıkarabilir (bir boyut bağımsız değişkeni belirtme gereksinimi ortadan kalkar) ve bunlar otomatik olarak eski ve güvenli olmayan işlevlerle daha yeni ve güvenli karşılıklarını değiştirir.Daha fazla bilgi için bkz. Güvenli Şablon Aşırı Yüklemeleri.
Genel Metin Yordam Eşleşmeleri
TCHAR.H yordamı |
_UNICODE & _MBCS tanımlanmamış |
_MBCS tanımlanmış |
_UNICODE tanımlanmış |
---|---|---|---|
_vsntprintf_s |
_vsnprintf_s |
_vsnprintf_s |
_vsnwprintf_s |
_vsntprintf_s_l |
_vsnprintf_s_l |
_vsnprintf_s_l |
_vsnwprintf_s_l |
.NET Framework Eşdeğeri
Uygulanamaz. Standart C işlevini çağırmak için PInvoke kullanın. Daha fazla bilgi için bkz. Platform Çağırma Örnekleri.
Gereksinimler
Yordam |
Gerekli başlık |
İsteğe bağlı üst bilgiler |
---|---|---|
vsnprintf_s |
<stdio.h> ve <stdarg.h> |
<varargs.h>* |
_vsnprintf_s, _vsnprintf_s_l |
<stdio.h> ve <stdarg.h> |
<varargs.h>* |
_vsnwprintf_s, _vsnwprintf_s_l |
<stdio.h> veya <wchar.h> ve <stdarg.h> |
<varargs.h>* |
* UNIX V uyumluluğu için gerekli.
Ek uyumluluk bilgileri için Giriş altındaki Uyumluluk bölümüne bakın.
Örnek
// crt_vsnprintf_s.cpp
#include <stdio.h>
#include <wtypes.h>
void FormatOutput(LPCSTR formatstring, ...)
{
int nSize = 0;
char buff[10];
memset(buff, 0, sizeof(buff));
va_list args;
va_start(args, formatstring);
nSize = vsnprintf_s( buff, _countof(buff), _TRUNCATE, formatstring, args);
printf("nSize: %d, buff: %s\n", nSize, buff);
}
int main() {
FormatOutput("%s %s", "Hi", "there");
FormatOutput("%s %s", "Hi", "there!");
FormatOutput("%s %s", "Hi", "there!!");
}
Ayrıca bkz.
Başvuru
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l