use*_*843 2 c static-analysis stdio cstdio
__inline int my_sprintf (char *dest,char *format,...)
{
va_list va;
va_start(va,format);
return vsprintf(dest,format,va);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我无法将缓冲区大小参数添加到my_sprintf,因为它在超过50k的位置使用,我不能用vsprintf_s或vsnprintf替换vsprintf.
任何替代方案可以使上述功能更安全吗?
你在这里要问的是(in)着名问题的特殊化:" 如果我拥有的是一个指针,如何获得数组的大小? "
没有办法弄清楚指向的对象的大小是多少dest.你最好的选择可能是咬紧牙关并改变那些50k的位置来传递大小.
您的代码可能还有更多内容,而您没有告诉我们.例如,在你提到的那些"50k"的地方,大小是否已知?如果是这样,你可以使用sizeof在幕后使用的脏的可变参数宏,然后调用一个带有长度参数的函数.