[英]Header for scanf_s function
scanf_s
是特定于Microsoft的。 标头为stdio.h
但不在GCC中。
用于从标准输入流中读取格式化的数据。 这些版本的scanf, scanf_s, _scanf_l, wscanf, _wscanf_l have security enhancements
由于Ideone uses GCC
原因,只有这样,您才获得undefined reference to scanf_s
通常,您可以在基于Windows的编译器(例如
Visual Studio 2008和Microsoft .NET 2010
int scanf_s(
const char *format [,
argument]...
);
根据MSDN帮助:
scanf_s函数从标准输入流stdin中读取数据,并将数据写入参数指定的位置。 每个自变量必须是指向类型变量的指针,该变量与格式中的类型说明符相对应。 如果在重叠的字符串之间进行复制,则行为是不确定的。
与scanf不同,scanf_s要求为c,C,s,S或[类型的所有输入参数指定缓冲区大小。 缓冲区大小在指向缓冲区或变量的指针之后立即作为附加参数传递。 例如,如果读取一个字符串,则按以下方式传递该字符串的缓冲区大小:
char s[10];
scanf_s("%9s", s, 10);
缓冲区大小包括终止null。 宽度规范字段可用于确保读入的令牌将适合缓冲区。 如果未使用宽度指定字段,并且令牌读取太大而无法放入缓冲区,则不会将任何内容写入该缓冲区。
In the case of characters, one may read a single character as follows:
char c;
scanf_s("%c", &c, 1);
当读取非空终止字符串的多个字符时,将整数用作宽度指定和缓冲区大小。
char c[4];
scanf_s("%4c", &c, 4); // not null terminated
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.