Share via


_snscanf, _snscanf_l, _snwscanf, _snwscanf_l

從字串讀取所指定長度的格式化資料。 這些函式有更安全的版本可供使用;請參閱 、、 _snwscanf_s_snscanf_s_l_snwscanf_s_l_snscanf_s

語法

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

如果 inputformatNULL 指標,或如果 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

另請參閱

scanf 寬度規格