Share via


_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_lswscanf_s_swscanf_s_lsscanf_s

如果 inputformatNULL 指標,則會叫用不正確參數處理常式,如參數驗證 中所述 。 如果允許繼續執行,這些函式會傳回 EOF,並將 errno 設為 EINVAL

如需這些錯誤碼和其他錯誤碼的相關資訊,請參閱 errno_doserrno_sys_errlist_sys_nerr

備註

此函式就像 sscanf_s ,不同之處在于它可讓您指定要從輸入字串檢查的固定字元數。 如需詳細資訊,請參閱 、 、 _sscanf_s_lswscanf_s_swscanf_s_lsscanf_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

另請參閱

scanf 寬度規格