gpt4 book ai didi

c - 既然我们有 snprintf,为什么我们没有 snscanf?

转载 作者:太空狗 更新时间:2023-10-29 16:35:20 27 4
gpt4 key购买 nike

我有snprintf,它可以避免缓冲区溢出,但是为什么没有snscanf函数呢?

代码:

int main()
{
char * src = "helloeveryone";
char buf1[5];
sscanf(src,"%s",buf1); // here is a array out of bounds

}

所以,我认为还需要一个snscanf。为什么我们只有 snprintf

最佳答案

C11 的有争议的(和可选的)附件 K 添加了一个 sscanf_s 函数,该函数在指针参数之后采用 rsize_t 类型的附加参数(也在附件 K 中定义) , 指定指向数组的大小。无论好坏,这些功能都没有得到广泛支持。您可以通过将大小放在转换说明符中来获得相同的结果,例如

char out[20];
sscanf(in, "%19s", out);

但如果目标对象的大小可能在运行时发生变化(您必须使用 snprintf 以编程方式构造转换说明符),这会很尴尬且容易出错。请注意,转换说明符中的字段宽度是要读取的最大输入字符数,并且 sscanf 还会为 %s 转换写入一个终止空字节,因此字段宽度你传递的必须严格小于目标对象的大小。

关于c - 既然我们有 snprintf,为什么我们没有 snscanf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18368712/

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