C++ 索引 TCHAR 字符串

C++ Indexing TCHAR string

本文关键字:字符串 TCHAR 索引 C++      更新时间:2023-10-16

我正在对一些旧的C++代码进行静态分析工作,但我的C++不是最强的。我有这段代码:

void NIDP_clDPLogger::log(TCHAR *logString)
{
    TCHAR temp_logString[1024] = {0};
    _tcsncpy(temp_logString,logString,1024);
    temp_logString[1023] = NULL;
            ...

静态分析工具在这里抱怨索引 logString(传递给函数的参数)在 1024 时它可能更短(大小各不相同,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 吗?

感谢所有的帮助。

sizeof(logString)将返回TCHAR*的大小,而不是数组在作为参数传递时衰减到指针时传递的数组的大小。

如果保证logString为空终止,则可以使用 _tcslen() 获取其长度。否则,知道logString大小的唯一方法是将其作为另一个参数传递到函数中。