_snscanf
、 、 _snscanf_l
、 _snwscanf
_snwscanf_l
從字串讀取所指定長度的格式化資料。 這些函式有更安全的版本可供使用;請參閱 、、_snwscanf_s
_snscanf_s_l
、。_snscanf_s
_snwscanf_s_l
語法
int __cdecl _snscanf(
const char * input,
size_t length,
const char * format,
...
);
int __cdecl _snscanf_l(
const char * input,
size_t length,
const char * format,
_locale_t locale,
...
);
int __cdecl _snwscanf(
const wchar_t * input,
size_t length,
const wchar_t * format,
...
);
int __cdecl _snwscanf_l(
const wchar_t * input,
size_t length,
const wchar_t * format,
_locale_t locale,
...
);
參數
input
要檢查的輸入字串。
length
input
中要檢查的字元數。
format
一或多個格式指定名稱。
...
選擇性變數,用來儲存 中格式規範 format
從輸入字串擷取的值。
locale
要使用的地區設定。
傳回值
這兩個函式都會傳回已成功轉換和指派的欄位數目;傳回值不包含已讀取但未指派的欄位。 傳回值 0 表示未指派任何欄位。 傳回值是 EOF
,其表示發生錯誤或在進行第一次轉換之前就到達字串結尾。 如需詳細資訊,請參閱sscanf
。
如果 input
或 format
是NULL
指標,或如果 length
小於或等於零,則會叫用無效的參數處理程式,如參數驗證中所述。 如果允許繼續執行,這些函式會傳回 EOF
,並將 errno
設為 EINVAL
。
如需這些錯誤碼和其他錯誤碼的相關信息,請參閱errno
、 _doserrno
_sys_errlist
和 _sys_nerr
。
備註
此函式就像 sscanf
,不同之處在於它可讓您指定要從輸入字串檢查的固定字元數。 如需詳細資訊,請參閱sscanf
。
這些有 _l
尾碼的函式版本是一樣的,不同之處在於會使用傳入的地區設定,而不使用目前的執行緒地區設定。
一般文字常式對應
Tchar.h 常式 | _UNICODE 和 _MBCS 未定義 |
_MBCS 已定義 |
_UNICODE 已定義 |
---|---|---|---|
_sntscanf |
_snscanf |
_snscanf |
_snwscanf |
_sntscanf_l |
_snscanf_l |
_snscanf_l |
_snwscanf_l |
需求
常式 | 必要的標頭 |
---|---|
_snscanf , _snscanf_l |
<stdio.h> |
_snwscanf , _snwscanf_l |
<stdio.h> 或 <wchar.h> |
如需相容性詳細資訊,請參閱相容性。
範例
// crt_snscanf.c
// compile with: /W3
#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( str1, 6, "%s %f", s1, &fp); // C4996
// Note: _snscanf is deprecated; consider using _snscanf_s instead
printf("_snscanf converted %d fields: ", i);
printf("%s and %f\n", s1, fp);
i = _snwscanf( str2, 6, L"%s %f", s2, &fp); // C4996
// Note: _snwscanf is deprecated; consider using _snwscanf_s instead
wprintf(L"_snwscanf converted %d fields: ", i);
wprintf(L"%s and %f\n", s2, fp);
}
_snscanf converted 2 fields: 15 and 12.000000
_snwscanf converted 2 fields: 15 and 12.000000