gpt4 book ai didi

c++ - 内存引用范围问题 : Variable value getting reset, 如何给 LPCWSTR 赋值?

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

我是初学者 cpp 程序员。我正在将字符串值转换为 LPCWSTR。当我试图访问这个值时,它给出了一个空值。请检查下面附上的代码。我认为这是因为内存引用值在变量范围之后被清除。

std::wstring string2wString(const std::string& s)
{
int len;
int slength = (int)s.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
std::wstring r(buf);
delete[] buf;
return r;
}

void main(){
string str1,str2,str3;
wstring wStr1;
LPCWSTR lpStr1[MAX_PATH];
int index=0;
for(int i=0;i<iLimit;i++)
{
str1="String 1";
//do operations
for(int j=0;j<jLimit;j++)
{
// do operations
str2=" String 2";
str3= str1+str2;
wStr1= string2wString(str3); //converting to wstring
lpStr1[index]=wStr1.c_str();
index++
}
}
cout << lpStr1[0] << endl;
}

请帮我解决这个问题。

最佳答案

wStr1.c_str() 返回的指针在以后修改wStr1 时可能会变得无效。

最好的解决方法是坚持使用 C++ 类型:

std::wstring strings[MAX_PATH];

// ...
MultiByteToWideChar(CP_ACP, 0, str3.c_str(), slength, buf, len);
strings[index] = buf;
delete[] buf;
// ...

或者,您可以推迟删除缓冲区并仅在您的数组中使用它:

LPCWSTR lpStr1[MAX_PATH];
// ...
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, str3.c_str(), slength, buf, len);
lpStr1[index] = buf;

关于c++ - 内存引用范围问题 : Variable value getting reset, 如何给 LPCWSTR 赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29493418/

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