_snscanf_s
、 、 _snscanf_s_l
、 _snwscanf_s
_snwscanf_s_l
從字串讀取所指定長度的格式化資料。 這些函式是 、 _snwscanf
_snscanf_l
、 的版本_snscanf
,_snwscanf_l
具有 CRT 中安全性功能中所述的安全性增強功能。
語法
int __cdecl _snscanf_s(
const char * input,
size_t length,
const char * format [, argument_list]
);
int __cdecl _snscanf_s_l(
const char * input,
size_t length,
const char * format,
_locale_t locale [, argument_list]
);
int __cdecl _snwscanf_s(
const wchar_t * input,
size_t length,
const wchar_t * format [, argument_list]
);
int __cdecl _snwscanf_s_l(
const wchar_t * input,
size_t length,
const wchar_t * format,
_locale_t locale [, argument_list]
);
參數
input
要檢查的輸入字串。
length
input
中要檢查的字元數。
format
一或多個格式指定名稱。
locale
要使用的地區設定。
argument_list
要根據格式字串指派的選擇性自變數。
傳回值
這兩個函式都會傳回已成功轉換和指派的欄位數目;傳回值不包含已讀取但未指派的欄位。 傳回值 0 表示未指派任何欄位。 傳回值是 EOF
,其表示發生錯誤或在進行第一次轉換之前就到達字串結尾。 如需詳細資訊,請參閱 、 、 _sscanf_s_l
swscanf_s
_swscanf_s_l
。sscanf_s
如果 input
或 format
為NULL
指標,則會叫用無效的參數處理程式,如參數驗證中所述。 如果允許繼續執行,這些函式會傳回 EOF
,並將 errno
設為 EINVAL
。
如需這些錯誤碼和其他錯誤碼的相關信息,請參閱errno
、 _doserrno
_sys_errlist
和 _sys_nerr
。
備註
此函式就像 sscanf_s
,不同之處在於它可讓您指定要從輸入字串檢查的固定字元數。 如需詳細資訊,請參閱 、 、 _sscanf_s_l
swscanf_s
_swscanf_s_l
。sscanf_s
需要緩衝區大小參數,且類型欄位字元 c、C、s、S 和 [。 如需詳細資訊,請參閱 scanf 類型欄位字元。
注意
大小參數為型別 unsigned
,而非 size_t
。
這些有 _l
尾碼的函式版本是一樣的,不同之處在於會使用傳入的地區設定,而不使用目前的執行緒地區設定。
一般文字常式對應
Tchar.h 常式 | _UNICODE 和 _MBCS 未定義 |
_MBCS 已定義 |
_UNICODE 已定義 |
---|---|---|---|
_sntscanf_s |
_snscanf_s |
_snscanf_s |
_snwscanf_s |
_sntscanf_s_l |
_snscanf_s_l |
_snscanf_s_l |
_snwscanf_s_l |
需求
常式 | 必要的標頭 |
---|---|
_snscanf_s , _snscanf_s_l |
<stdio.h> |
_snwscanf_s , _snwscanf_s_l |
<stdio.h> 或 <wchar.h> |
如需相容性詳細資訊,請參閱相容性。
範例
// crt_snscanf_s.c
// This example scans a string of
// numbers, using both the character
// and wide character secure versions
// of the snscanf function.
#include <stdio.h>
int main( )
{
char str1[] = "15 12 14...";
wchar_t str2[] = L"15 12 14...";
char s1[3];
wchar_t s2[3];
int i;
float fp;
i = _snscanf_s( str1, 6, "%s %f", s1, 3, &fp);
printf_s("_snscanf_s converted %d fields: ", i);
printf_s("%s and %f\n", s1, fp);
i = _snwscanf_s( str2, 6, L"%s %f", s2, 3, &fp);
wprintf_s(L"_snwscanf_s converted %d fields: ", i);
wprintf_s(L"%s and %f\n", s2, fp);
}
_snscanf_s converted 2 fields: 15 and 12.000000
_snwscanf_s converted 2 fields: 15 and 12.000000