printf_s
, _printf_s_l
, wprintf_s
, _wprintf_s_l
Biçimlendirilmiş çıkışı standart çıkış akışına yazdırır. Bu , _printf_l
, , _wprintf_l
wprintf
sürümlerininprintf
, CRT'deki Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmeleri vardır.
Sözdizimi
int printf_s(
const char *format [,
argument]...
);
int _printf_s_l(
const char *format,
_locale_t locale [,
argument]...
);
int wprintf_s(
const wchar_t *format [,
argument]...
);
int _wprintf_s_l(
const wchar_t *format,
_locale_t locale [,
argument]...
);
Parametreler
format
Biçim denetimi.
argument
İsteğe bağlı bağımsız değişkenler.
locale
Kullanılacak yerel ayar.
Dönüş değeri
Yazdırılan karakter sayısını veya hata oluşursa negatif bir değer döndürür.
Açıklamalar
İşlev, printf_s
bir dizi karakteri ve değeri standart çıkış akışı stdout
olan 'a biçimlendirip yazdırır. Bağımsız değişkenler dizeyi format
izlerse, dize bağımsız format
değişkenlerin çıkış biçimini belirleyen belirtimler içermelidir.
ile printf
arasındaki printf_s
temel fark, printf_s
biçim dizesini geçerli biçimlendirme karakterleri için denetlerkenprintf
, yalnızca biçim dizesinin null işaretçi olup olmadığını denetler. Denetimlerden biri başarısız olursa, Parametre doğrulama bölümünde açıklandığı gibi geçersiz bir parametre işleyicisi çağrılır. Yürütmenin devam etmesi için izin verilirse, işlevi -1 döndürür ve olarak EINVAL
ayarlanırerrno
.
ve hata kodları hakkında errno
bilgi için bkz.errno
, _doserrno
, _sys_errlist
ve _sys_nerr
.
printf_s
ve fprintf_s
aynı şekilde davranır, ancak çıkış printf_s
stdout
türüne FILE
değil hedefine yazar. Daha fazla bilgi için bkz. fprintf_s
, _fprintf_s_l
, fwprintf_s
, _fwprintf_s_l
.
wprintf_s
, öğesinin printf_s
format
geniş karakterli bir sürümüdür; geniş karakterli bir dizedir. wprintf_s
ve printf_s
akış ANSI modunda açıldığında aynı şekilde davranır. printf_s
şu anda UNICODE akışına çıkışı desteklemez.
Bu işlevlerin sonekli _l
sürümleri aynıdır, ancak geçerli iş parçacığı yerel ayarı yerine geçirilen yerel ayar parametresini kullanırlar.
Genel metin yordamı eşlemeleri
TCHAR.H olağan |
_UNICODE ve _MBCS tanımlanmadı |
_MBCS tanımlanan |
_UNICODE tanımlanan |
---|---|---|---|
_tprintf_s |
printf_s |
printf_s |
wprintf_s |
_tprintf_s_l |
_printf_s_l |
_printf_s_l |
_wprintf_s_l |
Bağımsız format
değişken sıradan karakterler, kaçış dizileri ve (bağımsız değişkenler izleniyorsa format
) biçim belirtimlerinden oluşur. Normal karakterler ve kaçış dizileri, görünüm sırasına stdout
göre kopyalanır. Örneğin, satır
printf_s("Line one\n\t\tLine two\n");
çıktıyı üretir
Line one
Line two
Biçim belirtimleri her zaman yüzde işaretiyle (%
) başlar ve soldan sağa okunur. printf_s
İlk biçim belirtimi (varsa) ile karşılaştığında, sonraki ilk bağımsız değişkenin format
değerini dönüştürür ve buna göre çıkışını verir. İkinci biçim belirtimi, ikinci bağımsız değişkenin dönüştürülmesine ve çıkışına neden olur, vb. Biçim belirtimlerinden daha fazla bağımsız değişken varsa, ek bağımsız değişkenler yoksayılır. Tüm biçim belirtimleri için yeterli bağımsız değişken yoksa sonuçlar tanımlanmamıştır.
Önemli
format
Kullanıcı tanımlı bir dize olmadığından emin olun.
Windows 10 sürüm 2004 'den (derleme 19041) printf
başlayarak, işlev ailesi yuvarlama için IEEE 754 kurallarına göre tam olarak temsil edilebilir kayan nokta numaraları yazdırır. Windows'un önceki sürümlerinde, '5' ile biten tam olarak temsil edilebilir kayan nokta sayıları her zaman yukarı yuvarlanırdı. IEEE 754, en yakın çift rakama ("Bankacı Yuvarlama" olarak da bilinir) yuvarlamaları gerektiğini belirtir. Örneğin, hem hem de printf("%1.0f", 1.5)
printf("%1.0f", 2.5)
2'ye yuvarlanmalıdır. Daha önce 1,5 2'ye, 2,5 ise 3'e yuvarlardı. Bu değişiklik yalnızca tam olarak temsil edilebilir sayıları etkiler. Örneğin, 2,35 (bellekte temsil edildiğinde 2,3500000000000000000008'e daha yakındır) 2,4'e kadar yuvarlanmaya devam eder. Bu işlevler tarafından yapılan yuvarlama artık tarafından fesetround
ayarlanan kayan nokta yuvarlama moduna da dikkat eder. Daha önce yuvarlama her zaman davranışı seçmişti FE_TONEAREST
. Bu değişiklik yalnızca Visual Studio 2019 sürüm 16.2 ve üzeri kullanılarak oluşturulan programları etkiler. Eski kayan nokta yuvarlama davranışını kullanmak için ile legacy_stdio_float_rounding.obj
bağlayın.
Gereksinimler
Yordam | Gerekli başlık |
---|---|
printf_s , _printf_s_l |
<stdio.h> |
wprintf_s , _wprintf_s_l |
<stdio.h> veya <wchar.h> |
Konsol Evrensel Windows Platformu (UWP) uygulamalarında desteklenmez. C çalışma zamanı işlevlerinin UWP uygulamalarında kullanabilmesi için önce konsolu stdin
, , stdout
ve stderr
ile ilişkilendirilmiş standart akış tanıtıcılarının yeniden yönlendirilmesi gerekir. Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Konsol Evrensel Windows Platformu (UWP) uygulamalarında desteklenmez. C çalışma zamanı işlevlerinin UWP uygulamalarında kullanabilmesi için önce konsolu stdin
, , stdout
ve stderr
ile ilişkilendirilmiş standart akış tanıtıcılarının yeniden yönlendirilmesi gerekir. Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// crt_printf_s.c
/* This program uses the printf_s and wprintf_s functions
* to produce formatted output.
*/
#include <stdio.h>
int main( void )
{
char ch = 'h', *string = "computer";
int count = -9234;
double fp = 251.7366;
wchar_t wch = L'w', *wstring = L"Unicode";
/* Display integers. */
printf_s( "Integer formats:\n"
" Decimal: %d Justified: %.6d Unsigned: %u\n",
count, count, count );
printf_s( "Decimal %d as:\n Hex: %Xh C hex: 0x%x Octal: %o\n",
count, count, count, count );
/* Display in different radixes. */
printf_s( "Digits 10 equal:\n Hex: %i Octal: %i Decimal: %i\n",
0x10, 010, 10 );
/* Display characters. */
printf_s("Characters in field (1):\n%10c%5hc%5C%5lc\n", ch, ch, wch, wch);
wprintf_s(L"Characters in field (2):\n%10C%5hc%5c%5lc\n", ch, ch, wch, wch);
/* Display strings. */
printf_s("Strings in field (1):\n%25s\n%25.4hs\n %S%25.3ls\n",
string, string, wstring, wstring);
wprintf_s(L"Strings in field (2):\n%25S\n%25.4hs\n %s%25.3ls\n",
string, string, wstring, wstring);
/* Display real numbers. */
printf_s( "Real numbers:\n %f %.2f %e %E\n", fp, fp, fp, fp );
/* Display pointer. */
printf_s( "\nAddress as: %p\n", &count);
}
Örnek çıktı
Integer formats:
Decimal: -9234 Justified: -009234 Unsigned: 4294958062
Decimal -9234 as:
Hex: FFFFDBEEh C hex: 0xffffdbee Octal: 37777755756
Digits 10 equal:
Hex: 16 Octal: 8 Decimal: 10
Characters in field (1):
h h w w
Characters in field (2):
h h w w
Strings in field (1):
computer
comp
Unicode Uni
Strings in field (2):
computer
comp
Unicode Uni
Real numbers:
251.736600 251.74 2.517366e+002 2.517366E+002
Address as: 0012FF78
Ayrıca bkz.
Matematik ve kayan nokta desteği
Akış G/Ç
Yerel ayar
fopen
, _wfopen
fprintf
, _fprintf_l
, fwprintf
, _fwprintf_l
scanf
, _scanf_l
, wscanf
, _wscanf_l
sprintf
, _sprintf_l
, swprintf
, _swprintf_l
, , __swprintf_l
vprintf
işlevleri