c - 如何确定 snprintf 目标缓冲区大小

标签 c

由于sprintf会导致一些缓冲区溢出,所以我需要将项目中的所有sprintf更改为snprintf。但我遇到了一些麻烦,如下:

void foo( char *a, uchar *string)
{
    sprintf(string, 'format', src_str);
}

问题是当目标字符串是函数的参数时,我们更改为snprintf后如何确定缓冲区大小或字符串的最大长度..

最佳答案

如果您可以选择自己分配目标缓冲区,则可以使用 strlen() 检查源字符串的长度,以防它以 null 结尾,并为它分配足够大的缓冲区it 和终止空字符。您还可以直接使用 asprintf(如果可用)。 如果没有该选项,则必须将目标缓冲区的大小作为参数传递,因为如果只有指向它的指针,则无法从函数内部可靠地确定其大小(除非目标缓冲区始终以唯一可识别的方式)。

关于c - 如何确定 snprintf 目标缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25672488/

相关文章:

c - 如何杀死包括自身在内的所有进程以及如何正确执行所有进程

python - 为什么 PyObject_IsInstance 在我的示例代码中总是返回 0

c++ - 如何在屏幕上打印内容

c - 如何在一开始不知道 n 的情况下随机选择 n 个对象中的一个?

c - Linux : setting locale at runtime and interprocess dependencies

objective-c - 使用大量值初始化数组和字典

c - 为什么这个 printf 语句没有产生书本示例中所示的输出?

c - 从 igraph_sparsemat_t 对行压缩格式进行操作

python - 将 Python str 传递给 C 函数

c - 未知类型名称 '__uint64_t'