gpt4 book ai didi

c++ - 为什么 MFC C++ CString(const char*) 完全改变 const char* 值?

转载 作者:搜寻专家 更新时间:2023-10-31 00:43:55 25 4
gpt4 key购买 nike

我希望标题足以帮助解释我遇到的问题。我想一旦我解决了这个问题,我的项目就差不多完成了。请注意,这两个项目都是在 Unicode 下编译的。

我正在使用一个 CLI/C++ DLL,它接受一个 LPCTSTR 并返回一个 const char*。如果我在单步执行时将返回值存储在项目的 const char* 中,我可以看到它返回的值是我期望返回的值。

现在,如果我执行以下操作:

LPCTSTR strValue = L"test";
const char* Return = MethodCall(strValue);
LPCTSTR Final = CString(Return);

Return 将等于“Xmkk=Asmks”(这是它应该的)。此方法加密字符串。问题是当我执行 CString 时,Final 将等于“ﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮ㹙癞鞮᠀诸²⤐²”。如何在不更改其数据的情况下将 onst char* 转换为 LPCTSTR

谢谢。

最佳答案

在 CString(Return) 被破坏后(这发生在“构造后的下一行”)“最终”指针指向释放的内存块(这是内部 CString(Return)缓冲区)。此时它指向的内存内容是未定义的,取消引用它是未定义的行为。
要安全地使用指向内部缓冲区的指针,您应该确保拥有缓冲区的 CString 在指针存在时一直存在。


LPCTSTR strValue = L"test";
const char* Return = MethodCall(strValue);
LPCTSTR PointerToBuffer= 0;
{
CString ReturnStringObj(Return);
PointerToBuffer = ReturnStringObj;
// Can safelly use your pointer here
}
// Here ReturnStringObj is killed and pointer dereferencing is invalid here



关于c++ - 为什么 MFC C++ CString(const char*) 完全改变 const char* 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9791661/

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