Aracılığıyla paylaş


sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l

Biçimlendirilmiş verileri bir dizeye yaz.Bu sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l sürümlerinde CRT'deki Güvenlik Özellikleri içinde açıklandığı gibi güvenlik geliştirmeleri mevcut olabilir.

int sprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format [,
   argument] ... 
);
int _sprintf_s_l(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format,
   locale_t locale [,
   argument] ... 
);
int swprintf_s(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format [,
   argument]...
);
int _swprintf_s_l(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format,
   locale_t locale [,
   argument]…
);
template <size_t size>
int sprintf_s(
   char (&buffer)[size],
   const char *format [,
   argument] ... 
); // C++ only
template <size_t size>
int swprintf_s(
   wchar_t (&buffer)[size],
   const wchar_t *format [,
   argument]...
); // C++ only

Parametreler

  • buffer
    Çıktı için depolama konumu

  • sizeOfBuffer
    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 Belirtimleri.

Dönüş Değeri

Yazılan karakterlerin sayısı veya bir hata oluştuysa –1.buffer ya da format, null işaretçi ise, sprintf_s ve swprintf_s -1 döndürür ve errno öğesini EINVAL olarak ayarlar.

sprintf_s, buffer içinde depolanan bayt sayısını verir; sondaki null karakter sayılmaz.swprintf_s, sonlandırıcı geniş null karakter hariç buffer içinde depolanan geniş karakter sayısını döndürür.

Notlar

sprintf_s işlevi buffer içinde bir dizi karakter ve değer biçimlendirir ve depolar.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.Null karakter, son karakter yazıldıktan sonra sona eklenir.Çakışan dizeler arasında kopyalama olursa davranış tanımsızdır.

sprintf_s ile sprintf arasında ana farklardan biri sprintf_s'nin biçim dizesini geçerli biçimlendirme karakterleri için kontrol etmesi, diğer taraftan sprintf'nin yalnızca biçim dizesi ya da tamponun NULL işaretçiler olup olmadığını kontrol etmesidir.Her iki denetim de başarısız olursa, Parametre Doğrulama bölümünde anlatıldığı gibi geçersiz parametre işleyicisi çağrılır.Yürütmenin devam etmesine izin verilirse işlev -1 döndürür ve errno öğesini EINVAL olarak ayarlar.

sprintf_s ile sprintf arasındaki diğer ana fark sprintf_s işlevinin, çıktı arabelleğinin boyutunu karakter sayısı olarak belirten bir uzunluk parametresi almasıdır.Tampon yazdırılan metin için çok küçükse, bu durumda tampon bir boş dizeye ayarlanır ve geçersiz parametre işleyici çağrılır.sprintf_s işlevi, snprintf işlevinden farklı olarak (arabellek boyutu sıfır değilse) arabelleğin null ile sonlandırılmasını garantiler.

swprintf_s geniş karakterli bir sprintf_s sürümüdür; swprintf_s ile ilgili işaretçi bağımsız değişkenler geniş karakterli dizelerdir.swprintf_s içinde kodlama hatalarının algılanması sprintf_s öğesine kıyasla farklı olabilir._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 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.

sprintf_s işlevinin, arabellek çok küçük olduğunda ne olacağı üzerinde ek denetim sunan sürümleri vardır.Daha fazla bilgi için bkz. _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l.

Genel Metin Yordam Eşleşmeleri

TCHAR.H yordamı

_UNICODE & _MBCS tanımlanmamış

_MBCS tanımlanmış

_UNICODE tanımlanmış

_stprintf_s

sprintf_s

sprintf_s

swprintf_s

_stprintf_s_l

_sprintf_s_l

_sprintf_s_l

_swprintf_s_l

Gereksinimler

Yordam

Gerekli başlık

sprintf_s, _sprintf_s_l

<stdio.h>

swprintf_s, _swprintf_s_l

<stdio.h> or <wchar.h>

Ek uyumluluk bilgileri için Giriş altındaki Uyumluluk bölümüne bakın.

Örnek

// crt_sprintf_s.c
// This program uses sprintf_s to format various
// data and place them in the string named buffer.
//

#include <stdio.h>

int main( void )
{
   char  buffer[200], s[] = "computer", c = 'l';
   int   i = 35, j;
   float fp = 1.7320534f;

   // Format and print various data: 
   j  = sprintf_s( buffer, 200,     "   String:    %s\n", s );
   j += sprintf_s( buffer + j, 200 - j, "   Character: %c\n", c );
   j += sprintf_s( buffer + j, 200 - j, "   Integer:   %d\n", i );
   j += sprintf_s( buffer + j, 200 - j, "   Real:      %f\n", fp );

   printf_s( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
  
// crt_swprintf_s.c
// wide character example
// also demonstrates swprintf_s returning error code
#include <stdio.h>

int main( void )
{
   wchar_t buf[100];
   int len = swprintf_s( buf, 100, L"%s", L"Hello world" );
   printf( "wrote %d characters\n", len );
   len = swprintf_s( buf, 100, L"%s", L"Hello\xffff world" );
   // swprintf_s fails because string contains WEOF (\xffff)
   printf( "wrote %d characters\n", len );
}
  

.NET Framework Eşdeğeri

System::String::Format

Ayrıca bkz.

Başvuru

Akış G/Ç

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