gpt4 book ai didi

c++ - 我可以对结果使用静态变量 "cache"吗? C++

转载 作者:太空狗 更新时间:2023-10-29 23:42:40 25 4
gpt4 key购买 nike

我正在使用一个返回 char* 的函数,现在我收到编译器警告“返回局部变量或临时变量的地址”,所以我想我将不得不使用静态变量来返回,我的问题我可以做类似 if(var already set) return var else do function and return var 的东西吗?

这是我的功能:

char * GetUID()
{
TCHAR buf[20];

StringCchPrintf(buf, 20*sizeof(char), TEXT("%s"),
someFunction());

return buf;
}

这就是我想要做的:

char * GetUID()
{
static TCHAR buf[20];

if(strlen(buf)!=0) return buf;

StringCchPrintf(buf, 20*sizeof(char), TEXT("%s"),
someFunction());

return buf;
}

这是否很好地使用了静态变量?我应该使用 ZeroMemory(&buf, 20*sizeof(char)) 吗?我删除它是因为如果我在 if(strlen...) 上方使用它,我的 TCHAR 长度永远不会为 0,我应该在下方使用它吗?

最佳答案

您收到警告的原因是,一旦函数退出,函数内为 buf 分配的内存将被弹出堆栈。如果您返回指向该内存地址的指针,则您有一个指向未定义内存的指针。它可能有效,也可能无效 - 无论如何都不安全。

通常,C/C++ 中的模式是分配一 block 内存并将指向该 block 的指针传递给您的函数。例如

void GetUID( char* buf )
{
if(strlen(buf)!=0) return;

StringCchPrintf(buf, 20*sizeof(char), TEXT("%s"), someFunction());
}

如果您希望函数 (GetUID) 本身处理缓存结果,那么您可以使用静态、单例 (OOP),或考虑 thread local storage .(例如在 Visual C++ 中)

__declspec(thread) TCHAR buf[20];

关于c++ - 我可以对结果使用静态变量 "cache"吗? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2915483/

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