gpt4 book ai didi

C++ 索引 TCHAR 字符串

转载 作者:行者123 更新时间:2023-11-30 03:02:32 25 4
gpt4 key购买 nike

我正在对一些旧的 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 以 null 终止,您可以使用 _tcslen() 获取它的长度。否则,了解 logString 大小的唯一方法是将其作为另一个参数传递给函数。

关于C++ 索引 TCHAR 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10087233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com