C++ 如何在双引号字符串中存储wchar值
在下面的代码中,我将c:\windows\Microsoft.Net\Framework\v2.0.057放入缓冲区。现在我想将上述值存储在双引号“c:\windows\Microsoft.Net\Framework\v2.0.057”中,并将其传递给进程。如何使用双引号创建此路径C++ 如何在双引号字符串中存储wchar值,c++,c,C++,C,在下面的代码中,我将c:\windows\Microsoft.Net\Framework\v2.0.057放入缓冲区。现在我想将上述值存储在双引号“c:\windows\Microsoft.Net\Framework\v2.0.057”中,并将其传递给进程。如何使用双引号创建此路径 HINSTANCE hDLL=LoadLibrary(文本(“mscoree.dll”); FNPTR_GET_COR_SYS_DIR GetCORSystemDirectory=NULL; GetCORSystem
HINSTANCE hDLL=LoadLibrary(文本(“mscoree.dll”);
FNPTR_GET_COR_SYS_DIR GetCORSystemDirectory=NULL;
GetCORSystemDirectory=(FNPTR_GET_COR_SYS_DIR)GetProcAddress(hDLL,“GetCORSystemDirectory”);
如果(GetCORSystemDirectory!=NULL)
{
WCHAR缓冲区[最大路径+1];
德沃德长度;
HRESULT hr=GetCORSystemDirectory(缓冲区、最大路径和长度);
std::string tbuf=“\”buffer\”;
//std::string tbuf=“\”+(字符串)缓冲区+“\\InMageSQL.dll\”/codebase/tlb/silent”;
如果(S_OK==hr)
{
wcscat(缓冲区,L“RegAsm.exe”);
STARTUPINFO si;
处理信息;
零内存(&si,sizeof(si));
si.cb=sizeof(si);
ZeroMemory(&pi,sizeof(pi));/(LPSTR)getcurrentpath.c_str()
if(!CreateProcess((LPCTSTR)buffer,(LPTSTR)strInMageSqlDll.c_str(),NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{
请尝试以下方法
std::wstring tbuf="\"";
tbuf+= buffer;
tbuf+= "\"";
JaredPar的方法可行,这里有一种选择:
std::wostringstream oss
oss << '"' << buffer << '"';
std::wstring strBuff(oss.str());
std::wostringstream-oss
oss我在这里有点冒险,因为近年来我没有太多使用windowsapi,也从未使用过WCHAR
首先,您可以稍微拓宽缓冲区,并将引号插入其中:
WCHAR buffer[MAX_PATH + 1 + 2];
buffer[0] = L'"';
buffer[sizeof(buffer)/sizeof(WCHAR)-1] = L'"';
DWORD length;
HRESULT hr = GetCORSystemDirectory(buffer,MAX_PATH+1,&length);
然而,这似乎是不雅观的。(我需要三思,我是否得到了sizeof(buffer)/sizeof(WCHAR)-1的正确答案——我太懒了。)
另一种方法是使用std::basic_string
模板。请注意,std::string
是std::basic_string
的typedef
。几乎不会阻止您将其实例化为其他字符类型:
WCHAR buffer[MAX_PATH + 1];
DWORD length;
HRESULT hr = GetCORSystemDirectory(buffer,MAX_PATH,&length);
std::basic_string<WCHAR> tbuf= L"\"" + buffer + L"\"";
// use 'tbuf.c_str()' to read 'tbuf' as a C-string (there's no safe way to write to it)
不能将wchar\t字符串附加到basic_string@JaredPar:但是您也不能将const char[]
分配给std::wstring
。犯了同样的错误。使用wostringstream和wstring应该可以很好地工作。@luke:但是,它有一个缺点,就是为一个易于执行的操作构造和销毁字符串流(而且可能更便宜)只使用字符串来完成。这只是一种选择。这种情况似乎并不严重影响性能。
WCHAR buffer[MAX_PATH + 1];
DWORD length;
HRESULT hr = GetCORSystemDirectory(buffer,MAX_PATH,&length);
std::basic_string<WCHAR> tbuf= L"\"" + buffer + L"\"";
// use 'tbuf.c_str()' to read 'tbuf' as a C-string (there's no safe way to write to it)
std::basic_string<WCHAR> tbuf = static_cast<WCHAR>(L'"')
+ buffer
+ static_cast<WCHAR>(L'"');