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 konumusizeOfBuffer
Depolanacak maksimum karakter sayısı.format
Biçim denetimi dizesiargument
İsteğe bağlı bağımsız değişkenlerlocale
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
Ayrıca bkz.
Başvuru
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l