fscanf、_fscanf_l、fwscanf、_fwscanf_lfscanf, _fscanf_l, fwscanf, _fwscanf_l

从流中读取带格式的数据。Read formatted data from a stream. 这些函数的更安全版本已发布。请参阅 fscanf_s、_fscanf_s_l、fwscanf_s、_fwscanf_s_lMore secure versions of these functions are available; see fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l.

语法Syntax

int fscanf(   
   FILE *stream,  
   const char *format [,  
   argument ]...   
);  
int _fscanf_l(   
   FILE *stream,  
   const char *format,  
   locale_t locale [,  
   argument ]...   
);  
int fwscanf(   
   FILE *stream,  
   const wchar_t *format [,  
   argument ]...   
);  
int _fwscanf_l(   
   FILE *stream,  
   const wchar_t *format,  
   locale_t locale [,  
   argument ]...   
);  

参数Parameters

stream
指向 FILE 结构的指针。Pointer to FILE structure.

format
窗体控件字符串。Format-control string.

argument
可选自变量。Optional arguments.

locale
要使用的区域设置。The locale to use.

返回值Return Value

每个函数都将返回成功转换并分配的字段数;返回值不包括已读取但未分配的字段。Each of these functions returns the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. 返回值为 0 表示没有分配任何字段。A return value of 0 indicates that no fields were assigned. 如果出现错误或在首次转换前达到文件流的结尾,则 fscanffwscanf 的返回值为 EOFIf an error occurs, or if the end of the file stream is reached before the first conversion, the return value is EOF for fscanf and fwscanf.

这些函数验证其参数。These functions validate their parameters. 如果 streamformat 是 null 指针,则将调用无效的参数处理程序,如参数验证中所述。If stream or format is a null pointer, the invalid parameter handler is invoked, as described in Parameter Validation. 如果允许执行继续,则这些函数将返回 EOF 并将 errno 设置为 EINVALIf execution is allowed to continue, these functions return EOF and set errno to EINVAL.

备注Remarks

fscanf 函数将从 stream 的当前位置将数据读取到 argument(如果有)提供的位置。The fscanf function reads data from the current position of stream into the locations given by argument (if any). 每个 argument 必须为指向类型的变量的指针,该类型与 format 中的类型说明符对应。Each argument must be a pointer to a variable of a type that corresponds to a type specifier in format. format 控制输入字段的解释,格式和函数与 scanfformat 参数相同;有关 format 的说明,请参阅 scanfformat controls the interpretation of the input fields and has the same form and function as the format argument for scanf; see scanf for a description of format.

fwscanffscanf 的宽字符版本;fwscanf 格式参数是宽字符字符串。fwscanf is a wide-character version of fscanf; the format argument to fwscanf is a wide-character string. 如果在 ANSI 模式下打开流,则这些函数行为相同。These functions behave identically identically if the stream is opened in ANSI mode. fscanf 当前不支持 UNICODE 流的输入。fscanf doesn't currently support input from a UNICODE stream.

这些带有 _l 后缀的函数的版本相同,只不过它们使用传递的区域设置参数而不是当前线程区域设置。The versions of these functions with the _l suffix are identical except that they use the locale parameter passed in instead of the current thread locale.

一般文本例程映射Generic-Text Routine Mappings

TCHAR.H 例程TCHAR.H routine 未定义 _UNICODE 和 _MBCS_UNICODE & _MBCS not defined 已定义 _MBCS_MBCS defined 已定义 _UNICODE_UNICODE defined
_ftscanf fscanf fscanf fwscanf
_ftscanf_l _fscanf_l _fscanf_l _fwscanf_l

有关详细信息,请参阅格式规范字段 — scanf 函数和 wscanf 函数For more information, see Format Specification Fields - scanf functions and wscanf Functions.

要求Requirements

函数Function 必需的标头Required header
fscanf, _fscanf_lfscanf, _fscanf_l <stdio.h><stdio.h>
fwscanf, _fwscanf_lfwscanf, _fwscanf_l <stdio.h> 或 <wchar.h><stdio.h> or <wchar.h>

有关其他兼容性信息,请参见“简介”中的 兼容性For additional compatibility information, see Compatibility in the Introduction.

示例Example

// crt_fscanf.c  
// compile with: /W3  
// This program writes formatted  
// data to a file. It then uses fscanf to  
// read the various data back from the file.  

#include <stdio.h>  

FILE *stream;  

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

   if( fopen_s( &stream, "fscanf.out", "w+" ) != 0 )  
      printf( "The file fscanf.out was not opened\n" );  
   else  
   {  
      fprintf( stream, "%s %ld %f%c", "a-string",   
               65000, 3.14159, 'x' );  
      // Security caution!  
      // Beware loading data from a file without confirming its size,  
      // as it may lead to a buffer overrun situation.  

      // Set pointer to beginning of file:  
      fseek( stream, 0L, SEEK_SET );  

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

      fscanf( stream, "%f", &fp ); // C4996  
      fscanf( stream, "%c", &c );  // C4996  
      // Note: fscanf is deprecated; consider using fscanf_s instead  

      // 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  

请参阅See Also

流 I/O Stream I/O
_cscanf、_cscanf_l、_cwscanf、_cwscanf_l _cscanf, _cscanf_l, _cwscanf, _cwscanf_l
fprintf、_fprintf_l、fwprintf、_fwprintf_l fprintf, _fprintf_l, fwprintf, _fwprintf_l
scanf、_scanf_l、wscanf、_wscanf_l scanf, _scanf_l, wscanf, _wscanf_l
sscanf、_sscanf_l、swscanf、_swscanf_l sscanf, _sscanf_l, swscanf, _swscanf_l
fscanf_s、_fscanf_s_l、fwscanf_s、_fwscanf_s_lfscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l