gpt4 book ai didi

c++ - 通过引用传递 LPCWSTR

转载 作者:行者123 更新时间:2023-11-28 01:09:30 27 4
gpt4 key购买 nike

我正在整理我很久以前写的一些代码,将其放入方法等中,当我尝试从目录搜索的输入提示中获取输入字符串和 LPCWSTR 时。

void GetInfo(string &stdStr, LPCWSTR &wStr)
{
cout << endl << "Enter String: ";
getline(cin, stdStr);

string sTempP = stdStr;

#ifdef UNICODE
std::wstring wTemp = s2ws(stdStr);
wStr = wTemp.c_str();
#else
wStr = stdStr.c_str();
#endif

stdStr = sTempP;

return;
}

当我调用

string directoryName;
LPCWSTR directory_Name;
GetInfo(directoryName, directory_Name);

std 字符串工作正常,但 LPCWSTR 给我垃圾。它们在方法内部都工作正常,所以我想知道通过引用传递这个字符串为什么会奇怪地工作?

哦,我尝试编写一个将 std::string 转换为 LPCWSTR 并将变量分配给它的函数,但这也很奇怪。如果在主体中定义,代码工作正常,只有在函数内部时我才会遇到问题。

谢谢,

弗雷泽

最佳答案

该代码中有几处我需要改进,但您的主要问题是 LPCWSTR 是指向字符串的指针,而不是字符串。您正在为 wStr 分配一个新的指针值,但是当您的函数返回时,指向 的内存不再有效。

UNICODE 被定义时,一旦 wTemp 不再在范围内,该内存就不再有效。在未定义 UNICODE 的情况下,指针不再有效,因为它指向 stdStr 中包含的数据 在您调用 时c_str()。当你执行

stdStr = sTempP;

之前返回给你的指针不能再被认为是有效的。

LPCWSTR 只是 const wchar_t * 的 Windows typedef。您最好将 GetInfo 的签名更改为如下内容:

void GetInfo(string &stdStr, wstring &wStr);

并相应地更改代码。假设您需要派生一个 LPCWSTR 来调用 Win32 API 函数或其他东西,您可以按照以下方法进行操作:

string directoryName;
wstring directory_Name;
GetInfo(directoryName, directory_Name);
LPCWSTR p_directory_Name = directory_Name.c_str();

关于c++ - 通过引用传递 LPCWSTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4137672/

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