gpt4 book ai didi

c++ - 使用 vector 而不是动态分配的 wchar 数组

转载 作者:太空宇宙 更新时间:2023-11-04 16:32:13 27 4
gpt4 key购买 nike

前几天,我被告知(在 stackoverflow 上!)因为我没有使用 vector 而不是动态分配的 wchar 数组。

所以我研究了使用这种字符串操作方法,因为它似乎是防止可能的内存泄漏的好主意。

我想出的是,除非我不正确地使用 vector 模板类,否则使用 vector 比使用堆分配数组和旧的 memcpy 灵活得多。

#include <shlobj.h>
HRESULT ModifyTheme()
{
using namespace std;

vector <WCHAR> sOutput;
vector <WCHAR> sPath;
vector <WCHAR> sThemesLocation;
vector <WCHAR> sThemeName;

const WCHAR sThemesPath [] = _T("\\Microsoft\\Windows\\Themes");
const WCHAR sFileName [] = _T("\\darkblue.theme");

sOutput.resize(MAX_PATH);
sPath.resize( MAX_PATH );
sThemesLocation.resize( MAX_PATH );
sThemeName.resize( MAX_PATH );

// Get appdata\local folder
SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, &sPath[0] );

// copy consts to vectors
memcpy( &sThemesLocation[0], sThemesPath, sizeof(sThemesPath) );
memcpy( &sThemeName[0], sFileName, sizeof(sFileName) );

// append themes path & filename
sOutput.insert( sOutput.begin(), sPath.begin(), sPath.end() );
sOutput.insert( sOutput.end()-1, sThemesLocation.begin(), sThemesLocation.end() );
sOutput.insert( sOutput.end()-1, sThemeName.begin(), sThemeName.end() );

wcout << &sThemeName[0] << endl;
wcout << &sThemesLocation[0] << endl;
wcout << &sPath[0] << endl;
wcout << &sOutput[0] << endl;

return S_OK;
}

我希望 sOutput vector 包含所有字符串的串联。相反,它只包含第一个插入的字符串。

此外,我想我记得听说过虽然不可能在初始化列表中分配 vector 的值,但这可能是 c++0x 的一个特性。这是否正确 - 是否有任何方法(在此刻)执行以下操作:

vector<wchar> sBleh = { _T("bleh") };

最后,对于我想通过上面的简单例程实现的目标,我是使用动态分配的数组更好,还是应该坚持使用看似不灵活的 wchar vector ?

最佳答案

如果您使用 std::vector<WCHAR>你可能应该使用 std::wstring因为它也是 WCHAR 的容器元素。

以下链接可能对您有帮助:
std::wstring (std::basic_string<WCHAR> 的类型定义)
std::basic_string

关于c++ - 使用 vector<wchar> 而不是动态分配的 wchar 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5702318/

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