我正在对一些旧的C ++代码进行静态分析,而我的C ++并不是最强大的。我有这段代码:
void NIDP_clDPLogger::log(TCHAR *logString)
{
TCHAR temp_logString[1024] = {0};
_tcsncpy(temp_logString,logString,1024);
temp_logString[1023] = NULL;
...
静态分析工具在这里抱怨在1024处索引 logString (传入函数的参数),当它可能更短时(尺寸变化,1024是我猜的最大尺寸)。所以我想我的修复方法是检查 logString 的大小并使用它,如下所示:
void NIDP_clDPLogger::log(TCHAR *logString)
{
size_t tempSize = sizeof(logString);
TCHAR temp_logString[tempSize] = {0};
_tcsncpy(temp_logString,logString,tempSize);
temp_logString[tempSize-1] = NULL;
我只是想知道,这项工作会好吗?任何人都可以看到任何缺陷/问题吗?建立和测试这个项目有点困难所以我基本上只是在我完成所有这些之前寻找一个健全性检查。或者我有更好的方法吗?我可以将size_t值传递给_tcsncpy,因为之前存在硬编码的int吗?
感谢您的帮助。
答案 0 :(得分:3)
sizeof(logString)
将返回TCHAR*
的大小,而不是作为参数传递时作为数组衰减到指针的数组大小。
如果保证logString
为空终止,您可以使用_tcslen()
获取其长度。否则,了解logString
大小的唯一方法是将其作为另一个参数传递给函数。