gpt4 book ai didi

c - vsnprintf 和 NULL 输入字符串参数

转载 作者:行者123 更新时间:2023-12-04 18:33:01 26 4
gpt4 key购买 nike

vsnprintf 的预期行为是什么?当它有一个输入 NULL 字符串和/或 size=0 时,例如

vsnprintf(NULL, 0, "%d", p);

或者
vsnprintf(NULL, 10, "%d", p);

它是未定义的行为还是有效的场景?两个输入字符串都不会崩溃 NULL其长度为 0 , 并返回 -1 (对于有效的非空字符串和零长度相同),但它确实会崩溃( NULL 输入字符串和正长度)。

最佳答案

vsnprintf(NULL, 0, "%d", p);实际上是定义的行为。

7.19.6.5/2 The snprintf function is equivalent to fprintf, except that the output is written into an array (specified by argument s) rather than to a stream. If n is zero, nothing is written,and s may be a null pointer. ...

7.19.6.12/2 The vsnprintf function is equivalent to snprintf ...


vsnprintf(NULL, 10, "%d", p);不是。自 n不为零,您违反了约束并且您有未定义的行为。无论哪种方式,您都可能会写入以尊重 NULL 指针,这也是未定义的行为。如果你很幸运,你的程序会崩溃。如果你不是,它会继续运行并对你的程序做一些奇怪的事情。

关于c - vsnprintf 和 NULL 输入字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37173525/

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