我正在对一些旧的 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 吗?
感谢所有帮助。