gpt4 book ai didi

c++ - 如何将 LPTSTR 传递给函数并修改其内容

转载 作者:行者123 更新时间:2023-11-28 07:46:28 24 4
gpt4 key购买 nike

我需要一个提供 LPTSTR 和枚举值的函数,根据该值构造一个字符串并将其放入 LPTSTR。

我编写了以下函数,它使用由枚举值索引的名称数组:

bool GetWinClassName(const int &WinType, LPTSTR *className, const int bufSize)
{
bool allOk = true;
LPTSTR tempName = new TCHAR[bufSize];
_stprintf_s(tempName, bufSize, TEXT("Win%sClass"), g_WinNames[WinType]);
std::cout << (char*)tempName << std::endl;
if (FAILED(StringCchCopy(*className, (bufSize+1)*sizeof(TCHAR), tempName)))
{
allOk = false;
}
delete[] tempName;
return allOk;
}

(最初我只有 _stprintf_s 行使用 className 而不是 tempName,这已被分解以查找错误所在。 )

上面的代码在 VC2010 Express 中编译但给出了一个未处理的异常:当它试图执行 StringCchCopy 行时,“访问冲突写入”(大概)到 *className

我可以通过这样做来让它工作

className = new TCHAR[bufSize];

在调用该函数之前(在它之后有一个匹配的 delete[])但是我真的需要在每次我想调用该函数时都这样做吗?

我明白哪里问题出在哪里,但不知道为什么,这阻碍了我想出一个可行的解决方案。在我看来,问题是我无法将某些内容放入 LPTSTR(通过 _stprintf_sStringCchCopy),除非我使用 new TCHAR 为其分配一些内存[缓冲区大小]。我试过为它分配一个大小完全相同但结果相同的初始值,这让我认为内存分配实际上与它无关。然后它会以某种方式将我的 LPTSTR 转换为 TCHAR[] 吗?我不明白这怎么可能,但在这个阶段,我什么都相信。

有人可以解释一下我做错了什么吗? (或者至少我的理解是错误的。)一个可能相关的问题是为什么我的 std::cout 只显示字符串的第一个字符?

最佳答案

wstring winClassName( int const winType )
{
return wstring( L"Win" ) + g_WinNames[winType] + L"Class";
}

但我完全不明白为什么你有那个全局名称数组等:这可能是一个设计级别的错误。

关于c++ - 如何将 LPTSTR 传递给函数并修改其内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14797948/

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