一边回答this问题我在 Ideone 上编译了代码并得到这个错误
implicit declaration of function ‘scanf_s’ [-Wimplicit-function-declaration]
不是
stdio.h
是 scanf_s
的标题?
最佳答案
scanf_s
是微软特有的。标题是 stdio.h
但不是在海湾合作委员会。
用于从标准输入流中读取格式化数据。这些版本的 scanf,scanf_s, _scanf_l, wscanf, _wscanf_l have security enhancements
如 Ideone uses GCC
正因为如此,你才得到undefined reference to scanf_s
大多数情况下,您可以在基于 Windows 的编译器中找到此函数,例如
Visual Studio 2008 和 微软 .NET 2010
Here and Here You found Interesting info about scanf_s
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);
缓冲区大小包括终止空值。宽度规范字段可用于确保读入的 token 适合缓冲区。如果未使用宽度规范字段,并且读取的 token 太大而无法放入缓冲区,则不会向该缓冲区写入任何内容。
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
关于c - scanf_s 函数的头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18836661/