我有这个简单的功能:
const wchar_t *StringManager::GetWCharTStar(int stringId)
{
    std::wstring originalString = StringManager::GetString(stringId);
    const wchar_t *retStr = originalString.c_str();
    return retStr;
}
在该函数的第二行,我有正确的wchar_t*.但是,当我返回时,数据切换到垃圾数据.两者之间没有任何功能.是什么赋予了?!
我正在使用SHGetSpecialFolderLocation API函数.我的应用程序设置为"使用Unicode字符集".
这是我到目前为止所拥有的:
int main ( int, char ** )
{
    LPITEMIDLIST pidl;
    HRESULT hr = SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &pidl);
    /* Confused at this point */
    wstring wstrPath;
    wstrPath.resize ( _MAX_PATH );
    BOOL f = SHGetPathFromIDList(pidl, wstrPath.c_str () );
    /* End confusion */
我得到的错误是:
error C2664: 'SHGetPathFromIDListW' : cannot convert parameter 2 from 'const wchar_t *' to 'LPWSTR'
有人可以帮忙吗?什么是正确的C++方式来做到这一点?
谢谢!
我正在尝试使用此线程中找到的方法拆分字符串,但我正在尝试将其调整为wstring.但是,我偶然发现了一个奇怪的错误.检查代码:
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main(void)
{
    wstring str(L"Börk börk");
    wistringstream iss(str);
    vector<wstring> tokens;
    copy(istream_iterator<wstring>(iss), // I GET THE ERROR HERE
         istream_iterator<wstring>(),
         back_inserter< vector<wstring> >(tokens));
    return 0;
}
确切的错误消息是:
error: no matching function for call to 'std::istream_iterator<std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, char, std::char_traits<char>, int>::istream_iterator(std::wistringstream&)'
我认为它说它不能使用传递的实例化istream_iterator iss(这是一个w istringstream而不是istringstream).这是在使用XCode和GCC 4.2的Mac上.和AFAIK没有wistring_iterator或类似的东西.
当我使用非wstring版本时它完美地工作.正如您可能看到我已经更改了要使用的声明wstring,wistringstreams和vector<wstring>,只是将所有内容替换为使用宽版本.
什么可能导致这个,为什么它不接受wstring-version?
以下是我尝试过的,但没有用.
std::wstring = L"Text";
USES_CONVERSION;
LPOLESTR lpDesc = W2OLE((LPWSTR)wsDescr.c_str());
请任何一个人说什么是更好的方法?
我已声明Wstring如下
wstring strID
当我尝试按如下方式查找出现的子字符串时
int index =   strID.find("LABS");
我收到如下错误
error C2664: 'unsigned int std::basic_string<_Elem,_Traits,_Ax>::find(const std::basic_string<_Elem,_Traits,_Ax> &,unsigned int) const' : cannot convert parameter 1 from 'const char [13]' to 'const std::basic_string<_Elem,_Traits,_Ax> &'
你能帮我找一下子串的出现吗?
是否可以在不使用平台特定功能的情况下打印UTF-8字符串?
#include <iostream>
#include <locale>
#include <string>
using namespace std;
int main()
{
    ios_base::sync_with_stdio(false);
    wcout.imbue(locale("en_US.UTF-8")); // broken on Windows (?)
    wstring ws1 = L"Wide string.";
    wstring ws2 = L"Wide string with special chars \u20AC";  // Euro character
    wcout << ws1 << endl;
    wcout << ws2 << endl;
    wcout << ws1 << endl;
}
我收到此运行时错误:
在抛出'std :: runtime_error'的实例后调用终止
what():locale :: facet :: _ S_create_c_locale名称无效
如果我删除该行wcout.imbue(locale("en_US.UTF-8"));,我只会ws1打印一次.
在另一个问题(" 我怎么能cin和cout一些unicode文本? ")中,Philipp写道:"wcin和wcout在Windows上不起作用,就像等效的C函数一样.只有原生API可以工作." MinGW也是真的吗?
谢谢你的提示!
平台:
MinGW/GCC 
Windows 7
如何确定 a 中的长度(字符数)std::wstring?
使用myStr.length()给出了字节大小(我认为),但不是字符数。我是否需要创建自己的函数来查找字符数,或者是否有本机 C++ 方式或本机 WinAPI 方式?
我想转换QString成BSTR反之亦然.
这是我尝试转换QString为BSTR:
std::wstring str_ = QString("some texts").toStdWString();
BSTR bstr_ = str_.c_str();
并转换BSTR为QString:
BSTR bstr_;
wchar_t *str_ = bstr_;
QString qstring_ = QString::fromWCharArray(str_);
它是否正确?换句话说,是否有任何数据丢失?如果是,那么正确的解决方案是什么?
为什么这不能编译:
std::wstring timeString();
if (sysTime->wHour < 10) timeString.append(L"hi");
但是,一旦我改变第一行是这样的:
std::wstring timeString(L"some text");
有用?
我正在使用MultiByteToWideChar将我的字符串转换为wstring.我首先尝试获得我的wstring所需的大小.根据文档传递0作为最后一个参数应该完成这个.使用MultiByteToWideChar(CP_UTF8, MB_COMPOSITE, str.c_str(), -1, nullptr, 0);返回0作为wstring缓冲区的所需大小.我已经验证str也是非空字符串.我在这做错了什么?