scanf, _scanf_l, wscanf, _wscanf_l
从标准输入流读取设置数据格式。 这些更安全版本功能可用;请参见 scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l。
int scanf(
const char *format [,
argument]...
);
int _scanf_l(
const char *format,
locale_t locale [,
argument]...
);
int wscanf(
const wchar_t *format [,
argument]...
);
int _wscanf_l(
const wchar_t *format,
locale_t locale [,
argument]...
);
参数
format
窗体控件字符串。argument
可选参数。locale
使用的区域设置。
返回值
返回成功转换和分配的字段数;返回值不包括读取,但未赋值的字段。 返回值为 0 表示字段未分配。
如果 format 是 NULL 指针,无效参数调用处理程序,如 参数验证所述。 如果执行允许继续,这些函数返回 EOF 并将 errno 到 EINVAL。
有关这些属性和其他错误代码的信息,请参见 _doserrno、errno、_sys_errlist 和_sys_nerr。
备注
scanf 函数读取标准输入流 stdin 并将数据添加到 argument出自的位置。 每 argument 必须是指向对应于 format的类型说明符类型的变量。 如果复制出现在重叠的字符串之间,该行为不确定。
安全说明 |
---|
在读取与 scanf时的一个字符串,用于 %s 格式始终指定宽度 (例如,而不是 "%s"的 "%32s" );否则,将不格式正确的输入很容易导致缓冲区溢出。或者,使用 scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l 或 fgets,请考虑。 |
wscanf 是 scanf的宽字符版本;为 wscanf 的 format 参数是宽字符字符串。 如果流在 ANSI 模式下,中打开wscanf 和 scanf 具有相同的行为。 scanf 当前不支持从 UNICODE 流的输入。
这些功能的版本与 _l 后缀的相同,只不过它们使用区域设置参数而不是当前线程区域设置。
一般文本例程映射
TCHAR.H 实例 |
未定义的_UNICODE & _MBCS |
定义的_MBCS |
定义的_UNICODE |
---|---|---|---|
_tscanf |
scanf |
scanf |
wscanf |
_tscanf_l |
_scanf_l |
_scanf_l |
_wscanf_l |
有关更多信息,请参见 格式规范字段— scanf 功能和 wscanf 功能。
要求
实例 |
必需的标头 |
---|---|
scanf, _scanf_l |
<stdio.h> |
wscanf, _wscanf_l |
<stdio.h> 或 <wchar.h> |
控件个在 Windows 应用商店 apps 不受支持。 标准流处理与控件个,stdin,stdout和 stderr,在 C 运行时函数在 Windows 应用商店 apps 之前,可以使用它们必须重定向。 有关其他的兼容性信息,请参见中介绍的 兼容性。
示例
// crt_scanf.c
// compile with: /W3
/* This program uses the scanf and wscanf functions
* to read formatted input.
*/
#include <stdio.h>
int main( void )
{
int i, result;
float fp;
char c, s[81];
wchar_t wc, ws[81];
result = scanf( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, ws ); // C4996
// Note: scanf and wscanf are deprecated; consider using scanf_s and wscanf_s
printf( "The number of fields input is %d\n", result );
printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);
result = wscanf( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, ws ); // C4996
wprintf( L"The number of fields input is %d\n", result );
wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}
.NET Framework 等效项
请参见 Parse 方法,如 System::Double::Parse。
请参见
参考
fscanf, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_l