sprintf、 _sprintf_l、 swprintf、 _swprintf_l、 __swprintf_l
寫入字串格式化的資料。 這些函式的一部分的更安全版本是可使用; see sprintf_s、 _sprintf_s_l、 swprintf_s、 _swprintf_s_l. 安全版本swprintf和_swprintf_l才count參數。
int sprintf(
char *buffer,
const char *format [,
argument] ...
);
int _sprintf_l(
char *buffer,
const char *format,
locale_t locale [,
argument] ...
);
int swprintf(
wchar_t *buffer,
size_t count,
const wchar_t *format [,
argument]...
);
int _swprintf_l(
wchar_t *buffer,
size_t count,
const wchar_t *format,
locale_t locale [,
argument] ...
);
int __swprintf_l(
wchar_t *buffer,
const wchar_t *format,
locale_t locale [,
argument] ...
);
template <size_t size>
int sprintf(
char (&buffer)[size],
const char *format [,
argument] ...
); // C++ only
template <size_t size>
int _sprintf_l(
char (&buffer)[size],
const char *format,
locale_t locale [,
argument] ...
); // C++ only
template <size_t size>
int swprintf(
wchar_t (&buffer)[size],
size_t count,
const wchar_t *format [,
argument]...
); // C++ only
template <size_t size>
int _swprintf_l(
wchar_t (&buffer)[size],
size_t count,
const wchar_t *format,
locale_t locale [,
argument] ...
); // C++ only
參數
buffer
輸出的儲存位置count
要儲存在 Unicode 版本之這個函式中的字元的最大數目。format
控制項的格式字串argument
選擇性引數locale
若要使用地區設定。
如需詳細資訊,請參閱格式規格。
傳回值
書寫,字元或 – 1,如果發生錯誤的數目。 如果buffer或format是空值的指標,不正確的參數處理常式會叫用,如所述參數驗證。 如果執行,則允許繼續執行,這些函數會傳回-1,並設定errno到EINVAL。
sprintf傳回儲存在中的位元組數目buffer,不計算結束的 null 字元。 swprintf傳回的寬字元數目儲存在buffer,不計算結束的 null 寬字元。
備註
sprintf函式格式化,並儲存起來一系列字元與數值中的buffer。 每個argument (如果有的話) 會轉換並輸出傳送至對應的格式規格,以根據format。 一般字元所組成的格式,與具有相同的表單,並作為format引數的 printf。 寫入的最後字元後會加入一個 null 字元。 如果複製之間的重疊的字串,這個行為未定義。
安全性提示 |
---|
使用sprintf,沒有方法可以限制寫入的字元數,這表示程式碼使用sprintf很容易遭到緩衝區溢位。請考慮使用相關的函式 _snprintf,這個原則會指定要寫入的字元數最大buffer,或使用 _scprintf 來決定多大的緩衝區是必要的。此外,確保format不是使用者定義的字串。 |
swprintf寬字元版本的sprintf。 指標引數去swprintf是寬字元字串。 偵測編碼中的錯誤swprintf ,可能會有所不同,在sprintf。 swprintf與fwprintf運作方式完全相同,除了swprintf字串,而不是目的型別,將輸出FILE,以及swprintf需要count參數來指定要寫入的字元的最大數目。 使用這些函式的版本_l尾碼完全相同,不同之處在於它們使用傳遞中而不是目前執行緒的地區設定的地區設定參數。
swprintf符合 ISO C 標準,而第二個參數,這會count,型別的size_t。 若要強制舊的非標準方式,定義_CRT_NON_CONFORMING_SWPRINTFS。 在未來的版本中,舊的行為可能會被移除,所以應該變更程式碼,以使用新一致的行為。
在 C++ 中,這些函式會有範本的多載,叫用這些函式的較新的、 安全對應項目。 如需詳細資訊,請參閱 安全範本多載。
泛用文字常式對應
TCHAR。H 常式 |
_UNICODE & 未定義的 _MBCS |
定義的 _MBCS |
定義 _unicode 之後 |
---|---|---|---|
_stprintf |
sprintf |
sprintf |
swprintf |
_stprintf_l |
_sprintf_l |
_sprintf_l |
__swprintf_l |
需求
常式 |
所需的標頭 |
---|---|
sprintf, _sprintf_l |
<stdio.h> |
swprintf, _swprintf_l |
<stdio.h> 或者 <wchar.h> |
其他的相容性資訊,請參閱相容性在簡介中。
範例
// crt_sprintf.c
// compile with: /W3
// This program uses sprintf 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( buffer, " String: %s\n", s ); // C4996
j += sprintf( buffer + j, " Character: %c\n", c ); // C4996
j += sprintf( buffer + j, " Integer: %d\n", i ); // C4996
j += sprintf( buffer + j, " Real: %f\n", fp );// C4996
// Note: sprintf is deprecated; consider using sprintf_s instead
printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
// crt_swprintf.c
// wide character example
// also demonstrates swprintf returning error code
#include <stdio.h>
int main( void )
{
wchar_t buf[100];
int len = swprintf( buf, 100, L"%s", L"Hello world" );
printf( "wrote %d characters\n", len );
len = swprintf( buf, 100, L"%s", L"Hello\xffff world" );
// swprintf fails because string contains WEOF (\xffff)
printf( "wrote %d characters\n", len );
}
.NET Framework 對等用法
請參閱
參考
fprintf、 _fprintf_l、 fwprintf、 _fwprintf_l
printf、 _printf_l、 wprintf、 _wprintf_l
scanf、 _scanf_l、 wscanf、 _wscanf_l