我不知道如何将std::wstring
转换为WCHAR*
std::wstring wstrProcToSearch;
WCHAR * wpProcToSearch = NULL;
std::wcin >> wstrProcToSearch; // input std::wstring
// now i need to convert the wstring to a WCHAR*
有谁知道如何做到这一点?
答案 0 :(得分:24)
如果您想从std::wstring
转换为const WCHAR*
(即返回的指针为字符串内容提供只读访问),则调用std::wstring::c_str()
方法很好:
std::wstring wstrProcToSearch;
std::wcin >> wstrProcToSearch; // input std::wstring
// Convert to const WCHAR* (read-only access)
const WCHAR * wpszProcToSearch = wstrProcToSearch.c_str();
相反,如果你想修改 std::wstring
的内容,情况会有所不同。您可以使用&wstr[0]
(其中wstr
是std::wstring
的非空实例)来访问std::wstring
的内容(从其第一个字符的地址开始,以及注意字符是连续存储在内存中的,但是你必须注意不要超出字符串的预分配内存。
通常,如果您的std::wstring
长度为L
,则可以访问索引0
中的字符
至(L-1)
Overwriting the terminating '\0'
(位于索引L
)是未定义的行为(实际上,它在Visual C ++上是正常的,至少对于VC9 / VS2008和VC10 / VS2010而言)。
如果字符串的大小不合适(即它不足以满足您的需要),那么您可以调用std::wstring::resize()
为新字符腾出空间(即调整内部std::wstring
缓冲区的大小) ,然后使用&wstr[0]
来读写std::wstring
的内容。
答案 1 :(得分:16)
如果字符串已经是正确的长度并且不需要更改,则可以通过获取指向第一个字符的指针来获取非const指针:
WCHAR * wpProcToSearch = &wstrProcToSearch[0];
这保证在C ++ 11中有效,并且没有C ++ 03的已知实现,但它没有。
如果您只需要一个const指针,则应使用c_str
:
const WCHAR * wpProcToSearch = wstrProcToSearch.c_str();
答案 2 :(得分:8)
我认为你可以使用
wpProcToSearch = wstrProcToSearch.c_str()
就像使用普通的std :: string。
答案 3 :(得分:1)
我推荐这种方法:
private void button4_Click(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load("dati.txt");
foreach (XmlNode node in doc.SelectNodes("//user"))
{
String User = node.SelectSingleNode("name").InnerText;
String Pass = node.SelectSingleNode("password").InnerText;
if (User == textBox1.Text && Pass == textBox2.Text)
{
button1.Visible = true;
dlt_btn.Visible = true;
button3.Visible = true;
button3.Visible = true;
button5.Visible = true;
return;
}
else
{
MessageBox.Show("Invalid Username or Password!");
}
}
}
这很简单,但是您根本无法更改字符串的长度。因此,移动“ \ 0”可能无效...