gpt4 book ai didi

c - scanf_s 函数的头文件

转载 作者:行者123 更新时间:2023-12-03 20:37:33 25 4
gpt4 key购买 nike

一边回答this问题我在 Ideone 上编译了代码并得到这个错误

implicit declaration of function ‘scanf_s’ [-Wimplicit-function-declaration]

不是 stdio.hscanf_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com