sprintf_s、 _sprintf_s_l、 swprintf_s、 _swprintf_s_l
寫入字串格式化的資料。 這些是舊版sprintf、 _sprintf_l、 swprintf、 _swprintf_l、 __swprintf_l中所述的安全性增強功能與安全性功能,則在 CRT 中。
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
參數
buffer
輸出的儲存位置sizeOfBuffer
要儲存的字元的最大數目。format
控制項的格式字串argument
選擇性引數locale
若要使用地區設定。
如需詳細資訊,請參閱格式規格。
傳回值
書寫,字元或 – 1,如果發生錯誤的數目。 If buffer or format is a null pointer, sprintf_s and swprintf_s return -1 and set errno to EINVAL.
sprintf_s傳回儲存在中的位元組數目buffer,不計算結束的 null 字元。 swprintf_s傳回的寬字元數目儲存在buffer,不計算結束的 null 寬字元。
備註
sprintf_s函式格式化,並儲存起來一系列字元與數值中的buffer。 每個argument (如果有的話) 會轉換並輸出傳送至對應的格式規格,以根據format。 一般字元所組成的格式,與具有相同的表單,並作為format引數的 printf。 寫入的最後字元後會加入一個 null 字元。 如果複製之間的重疊的字串,這個行為未定義。
其中一個主要差異sprintf_s和sprintf ,就是sprintf_s檢查有效的格式字元的格式字串,而sprintf只會檢查的格式字串或緩衝區都是NULL指標。 如果其中一個檢查失敗時,不正確的參數處理常式會叫用,如所述參數驗證。 如果要繼續,函式傳回-1 和集合允許執行errno到EINVAL。
其他之間的主要差別sprintf_s和sprintf的sprintf_s採用長度參數指定輸出緩衝區的大小,以字元為單位。 如果緩衝區太小,要列印的文字,緩衝區設定為空字串,並叫用無效的參數處理常式。 不像snprintf, sprintf_s可以保證緩衝區會是 null 結尾 (除非緩衝區大小為零)。
swprintf_s寬字元版本的sprintf_s。 指標引數去swprintf_s是寬字元字串。 偵測編碼中的錯誤swprintf_s ,可能會有所不同,在sprintf_s。 使用這些函式的版本_l尾碼完全相同,不同之處在於它們使用傳遞中而不是目前執行緒的地區設定的地區設定參數。
在 C++ 中,使用這些函式已經過簡化的樣板的多載 ; 多載可以自動推斷緩衝區長度 (而不必指定 size 引數),它們可以自動取代較舊的、 不安全的函式與其較新的、 安全的對應項目。 如需詳細資訊,請參閱 安全範本多載。
有版本sprintf_s ,以提供進一步控管,如果緩衝區太小,會發生什麼事。 如需詳細資訊,請參閱 _snprintf_s、 _snprintf_s_l、 _snwprintf_s、 _snwprintf_s_l。
泛用文字常式對應
TCHAR。H 常式 |
_UNICODE & 未定義的 _MBCS |
定義的 _MBCS |
定義 _unicode 之後 |
---|---|---|---|
_stprintf_s |
sprintf_s |
sprintf_s |
swprintf_s |
_stprintf_s_l |
_sprintf_s_l |
_sprintf_s_l |
_swprintf_s_l |
需求
常式 |
所需的標頭 |
---|---|
sprintf_s, _sprintf_s_l |
<stdio.h> |
swprintf_s, _swprintf_s_l |
<stdio.h> 或者 <wchar.h> |
其他的相容性資訊,請參閱相容性在簡介中。
範例
// 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 對等用法
[M:System::String::Format]
請參閱
參考
fprintf、 _fprintf_l、 fwprintf、 _fwprintf_l
printf、 _printf_l、 wprintf、 _wprintf_l
scanf、 _scanf_l、 wscanf、 _wscanf_l