Aracılığıyla paylaş


_snprintf, _snprintf_l, _snwprintf, _snwprintf_l

Biçimlendirilmiş verileri bir dizeye yazar.Bu işlevlerin daha güvenli sürümleri mevcuttur; bkz. _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l.

int _snprintf(
   char *buffer,
   size_t count,
   const char *format [,
   argument] ... 
);
int _snprintf_l(
   char *buffer,
   size_t count,
   const char *format,
   locale_t locale [,
   argument] ... 
);
int _snwprintf(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format [,
   argument] ... 
);
int _snwprintf_l(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   locale_t locale [,
   argument] ... 
);
template <size_t size>
int _snprintf(
   char (&buffer)[size],
   size_t count,
   const char *format [,
   argument] ... 
); // C++ only
template <size_t size>
int _snprintf_l(
   char (&buffer)[size],
   size_t count,
   const char *format,
   locale_t locale [,
   argument] ... 
); // C++ only
template <size_t size>
int _snwprintf(
   wchar_t (&buffer)[size],
   size_t count,
   const wchar_t *format [,
   argument] ... 
); // C++ only
template <size_t size>
int _snwprintf_l(
   wchar_t (&buffer)[size],
   size_t count,
   const wchar_t *format,
   locale_t locale [,
   argument] ... 
); // C++ only

Parametreler

  • buffer
    Çıktı için depolama konumu.

  • count
    Depolanacak maksimum karakter sayısı.

  • 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 Belirtim Sözdizimi: printf ve wprintf İşlevleri.

Dönüş Değeri

len öğesinin sonlandırıcı null içermeden, biçimlendirilmiş veri dizesinin uzunluğunda olmasını sağlayın.len ve count, _snprintf için bayt cinsinden, _snwprintf için geniş karakterler biçimindedir.

len < count, len karakterleri buffer içinde depolanıyorsa, bir sonlandırıcı null eklenir ve len döndürülür.

len = count, len karakterleri buffer içinde depolanıyorsa, bir sonlandırıcı null eklenmez ve len döndürülür.

len > count, count karakterleri buffer içinde depolanıyorsa, bir sonlandırıcı null eklenmez ve negatif değer döndürülür.

buffer null bir işaretçiyse ve count sıfırsa, len sonlandırıcı null içerilmeden, çıktıyı biçimlendirmek için gereken karakter sayısı döndürülür.Aynı argument ve locale parametreleriyle başarılı bir çağrı yapmak için, en az len + 1 karakter tutan bir arabellek ayırın.

buffer null bir işaretçiyse ve count sıfır değilse ya da format bir null işaretçiyse, Parametre Doğrulama bağlantısında açıklandığı gibi geçersiz parametre işleyicisi çağrılır.Yürütmenin devam etmesine izin verilirse, bu işlevler -1 döndürür ve errno öğesini EINVAL olarak ayarlar.

Bu ve diğer hata kodları hakkında bilgi için bkz. errno, _doserrno, _sys_errlist, and _sys_nerr.

Notlar

_snprintf işlevi count veya daha az karakteri buffer içinde biçimlendirir ve saklar, biçimlendirilmiş dizenin uzunluğu count karakterden kesinlikle az ise bir sonlandırıcı null karakter ekler.Her argument (varsa) dönüştürülür ve denk gelen format kapsamındaki biçim belirtimine göre çıkışı alınır.Biçim sıradan karakterlerden oluşur ve printf için format bağımsız değişkeni ile aynı form ve işleve sahiptir.Çakışan dizeler arasında kopyalama olursa davranış tanımsızdır.

Güvenlik NotuGüvenlik Notu

format öğesinin bir kullanıcı tanımlı dize olmadığından emin olun.Bu işlev, özellikle dönüş değeri count olduğunda, bir sonlandırıcı NULL garanti etmediğinden, ardından sonlandırıcı null ekleyen bir kod geldiğinden emin olun.Daha fazla bilgi için, bkz. Arabellek Taşmalarını Önleme.

_snwprintf geniş karakterli bir _snprintf sürümüdür; _snwprintf ile ilgili işaretçi bağımsız değişkenler geniş karakterli dizelerdir._snwprintf içinde kodlama hatalarının algılanması _snprintf öğesine kıyasla farklı olabilir.swprintf gibi _snwprintf öğesi de çıktıyı FILE türünde bir hedef dosyasına yazmak yerine dizeye yazar.

_l sonekine sahip bu işlevlerin sürümleri, geçerli iş parçacığı yerel ayarı yerine iletilen yerel ayar parametresini kullanmalarıdır.

C++ dilinde, daha yeni ve daha güvenli karşıtları başlatan şablon aşırı yüklemeleri vardır.Daha fazla bilgi için bkz. Güvenli Şablon Aşırı Yüklemeleri.

Genel Metin Yordam Eşleşmeleri

Tchar.h yordamı

_UNICODE ve _MBCS tanımlanmaz

_MBCS tanımlanmış

_UNICODE tanımlanmış

_sntprintf

_snprintf

_snprintf

_snwprintf

_sntprintf_l

_snprintf_l

_snprintf_l

_snwprintf_l

Gereksinimler

Yordam

Gerekli başlık

_snprintf, _snprintf_l

<stdio.h>

_snwprintf, _snwprintf_l

<stdio.h> veya <wchar.h>

Uyumluluk hakkında daha fazla bilgi için bkz. Uyumluluk.

Örnek

// crt_snprintf.c
// compile with: /W3
#include <stdio.h>
#include <stdlib.h>

#if !defined(__cplusplus)
typedef int bool;
const bool true = 1;
const bool false = 0;
#endif

#define FAIL 0 // change to 1 and see what happens

int main(void)
{
   char buffer[200];
   const static char s[] = "computer"
#if FAIL
"computercomputercomputercomputercomputercomputercomputercomputer"
"computercomputercomputercomputercomputercomputercomputercomputer"
"computercomputercomputercomputercomputercomputercomputercomputer"
"computercomputercomputercomputercomputercomputercomputercomputer"
#endif
   ;
   const char c = 'l'; 
   const int i = 35;
#if FAIL
   const double fp = 1e300; // doesn't fit in the buffer
#else
   const double fp = 1.7320534;
#endif
   /* !subtract one to prevent "squeezing out" the terminal nul! */
   const int bufferSize = sizeof(buffer)/sizeof(buffer[0]) - 1;
   int bufferUsed = 0;
   int bufferLeft = bufferSize - bufferUsed;
   bool bSuccess = true;
   buffer[0] = 0;

   /* Format and print various data: */

   if (bufferLeft > 0)
   {
      int perElementBufferUsed = _snprintf(&buffer[bufferUsed], 
      bufferLeft, "   String: %s\n", s ); // C4996
      // Note: _snprintf is deprecated; consider _snprintf_s instead
      if (bSuccess = (perElementBufferUsed >= 0))
      {
         bufferUsed += perElementBufferUsed;
         bufferLeft -= perElementBufferUsed;
         if (bufferLeft > 0)
         {
            int perElementBufferUsed = _snprintf(&buffer[bufferUsed], 
            bufferLeft, "   Character: %c\n", c ); // C4996
            if (bSuccess = (perElementBufferUsed >= 0))
            {
               bufferUsed += perElementBufferUsed;
               bufferLeft -= perElementBufferUsed;
               if (bufferLeft > 0)
               {
                  int perElementBufferUsed = _snprintf(&buffer
                  [bufferUsed], bufferLeft, "   Integer: %d\n", i ); // C4996
                  if (bSuccess = (perElementBufferUsed >= 0))
                  {
                     bufferUsed += perElementBufferUsed;
                     bufferLeft -= perElementBufferUsed;
                     if (bufferLeft > 0)
                     {
                        int perElementBufferUsed = _snprintf(&buffer
                        [bufferUsed], bufferLeft, "   Real: %f\n", fp ); // C4996
                        if (bSuccess = (perElementBufferUsed >= 0))
                        {
                           bufferUsed += perElementBufferUsed;
                        }
                     }
                  }
               }
            }
         }
      }
   }

   if (!bSuccess)
   {
      printf("%s\n", "failure");
   }
   else
   {
      /* !store nul because _snprintf doesn't necessarily (if the string 
       * fits without the terminal nul, but not with it)!
       * bufferUsed might be as large as bufferSize, which normally is 
       * like going one element beyond a buffer, but in this case 
       * subtracted one from bufferSize, so we're ok.
       */
      buffer[bufferUsed] = 0;
      printf( "Output:\n%s\ncharacter count = %d\n", buffer, bufferUsed );
   }
   return EXIT_SUCCESS;
}
  

.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.

Ayrıca bkz.

Başvuru

Akış G/Ç

sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

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 İşlevleri