由于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/