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 NotuGü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

Akış G/Ç

vprintf İşlevleri

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