共用方式為


fscanf_s、 、 _fscanf_s_lfwscanf_s_fwscanf_s_l

從資料流讀取格式化資料。 這些版本的fscanf_fscanf_lfwscanf _fwscanf_l具有安全性增強功能,如 CRT 中的安全性功能中所述。

語法

int fscanf_s(
   FILE *stream,
   const char *format [,
   argument ]...
);
int _fscanf_s_l(
   FILE *stream,
   const char *format,
   _locale_t locale [,
   argument ]...
);
int fwscanf_s(
   FILE *stream,
   const wchar_t *format [,
   argument ]...
);
int _fwscanf_s_l(
   FILE *stream,
   const wchar_t *format,
   _locale_t locale [,
   argument ]...
);

參數

stream
FILE 結構的指標。

format
格式控制字串。

argument
選擇性引數。

locale
要使用的地區設定。

傳回值

每個函式都會傳回它成功轉換並指派的欄位數目。 傳回值不包含已讀取但未指派的欄位。 傳回值 0 表示未指派任何欄位。 如果發生錯誤,或進行第一次轉換之前就到達檔案資料流結尾,則 fscanf_sfwscanf_s 的傳回值是 EOF

這些函式會驗證它們的參數。 如果 stream 是無效的檔案指標,或format為 Null 指標,則這些函式會叫用無效的參數處理程式,如參數驗證中所述。 如果允許繼續執行,這些函式會傳回 EOF,並將 errno 設為 EINVAL

備註

fscanf_s 函式會將 stream 之目前位置的資料讀取到 argument (如果有的話) 所指定的位置。 每個 argument 必須是 format 中對應至型別指定名稱的型別變數指標。 format 會控制輸入欄位的解譯,並且具有與 formatscanf_s變數相同的表單和函式;請參閱 格式規格字段: scanfwscanf 式,以取得的描述 formatfwscanf_sfscanf_s 的寬字元版本;fwscanf_s 的格式引數是寬字元字串。 如果資料流是以 ANSI 模式開啟,則這些函式的行為相同。 fscanf_s 目前不支援來自 UNICODE 資料流的輸入。

較安全的函式 (具有 _s 字尾) 和其他版本主要的不同在於,較安全的函式要求每個 cCsS[ 類型欄位的大小 (以字元為單位) 都要緊接在變數後以引數的方式傳遞。 如需詳細資訊,請參閱scanf_swscanf_s_scanf_s_lscanf _wscanf_s_l寬度規格。

注意

大小參數為型別 unsigned,而非 size_t

這些有 _l 尾碼的函式版本是一樣的,不同之處在於會使用傳入的地區設定參數,而不使用目前的執行緒地區設定。

一般文字常式對應

TCHAR.H 常式 _UNICODE_MBCS 未定義 _MBCS 已定義 _UNICODE 已定義
_ftscanf_s fscanf_s fscanf_s fwscanf_s
_ftscanf_s_l _fscanf_s_l _fscanf_s_l _fwscanf_s_l

需求

函式 必要的標頭
fscanf_s, _fscanf_s_l <stdio.h>
fwscanf_s, _fwscanf_s_l <stdio.h><wchar.h>

如需相容性詳細資訊,請參閱相容性

範例

// crt_fscanf_s.c
// This program writes formatted
// data to a file. It then uses fscanf to
// read the various data back from the file.

#include <stdio.h>
#include <stdlib.h>

FILE *stream;

int main( void )
{
   long l;
   float fp;
   char s[81];
   char c;

   errno_t err = fopen_s( &stream, "fscanf.out", "w+" );
   if( err )
      printf_s( "The file fscanf.out was not opened\n" );
   else
   {
      fprintf_s( stream, "%s %ld %f%c", "a-string",
               65000, 3.14159, 'x' );
      // Set pointer to beginning of file:
      fseek( stream, 0L, SEEK_SET );

      // Read data back from file:
      fscanf_s( stream, "%s", s, _countof(s) );
      fscanf_s( stream, "%ld", &l );

      fscanf_s( stream, "%f", &fp );
      fscanf_s( stream, "%c", &c, 1 );

      // Output data read:
      printf( "%s\n", s );
      printf( "%ld\n", l );
      printf( "%f\n", fp );
      printf( "%c\n", c );

      fclose( stream );
   }
}
a-string
65000
3.141590
x

另請參閱

資料流 I/O
_cscanf_s、 、 _cscanf_s_l_cwscanf_s_cwscanf_s_l
fprintf_s、 、 _fprintf_s_lfwprintf_s_fwprintf_s_l
scanf_s、 、 _scanf_s_lwscanf_s_wscanf_s_l
sscanf_s、 、 _sscanf_s_lswscanf_s_swscanf_s_l
fscanf、 、 _fscanf_lfwscanf_fwscanf_l