Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在双引号字符串中存储wchar值_C++_C - Fatal编程技术网

C++ 如何在双引号字符串中存储wchar值

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

在下面的代码中,我将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;
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'"');