gpt4 book ai didi

c - snprintf 缓冲区大小的负/零值

转载 作者:太空狗 更新时间:2023-10-29 15:47:24 24 4
gpt4 key购买 nike

如果将负数或 0 作为第二个参数传递给 snprintf(),它将写入提供的缓冲区位置。希望认为这不应导致任何意外行为。

int snprintf(char *str, size_t size, const char *format, ...);

最佳答案

引用 C11 , chpater §7.21.6.5, snprintf()函数

int snprintf(char * restrict s, size_t n,const char * restrict format, ...);

[...] If n is zero, nothing is written, and s may be a null pointer.

因此,如果您传递 0,则不会写入任何内容。

万一你通过了 - ve 值,它可能会产生问题,因为第二个参数的类型为 size_t这是 unsigned .因此,带符号的值将被视为 unsigned产生不需要的尺寸。这可能会导致问题(内存溢出),因为大小可能超过提供的缓冲区可以处理的大小,这会调用 undefined behavior。 ..尽管如此,只要缓冲区大到足以容纳提供的数据,提供的数据就会写入缓冲区。

来自 §7.19,<stddef.h>

size_t
which is the unsigned integer type of the result of the sizeof operator;

关于c - snprintf 缓冲区大小的负/零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37432797/

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