标签: wstring

.c_str()奇怪吗?数据变化没有押韵或原因?

我有这个简单的功能:

const wchar_t *StringManager::GetWCharTStar(int stringId)
{
    std::wstring originalString = StringManager::GetString(stringId);
    const wchar_t *retStr = originalString.c_str();
    return retStr;
}
Run Code Online (Sandbox Code Playgroud)

在该函数的第二行,我有正确的wchar_t*.但是,当我返回时,数据切换到垃圾数据.两者之间没有任何功能.是什么赋予了?!

c++ string wchar-t wstring c-str

3
推荐指数
2
解决办法
875
查看次数

C++:在API函数中使用std :: wstring

我正在使用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 */
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

error C2664: 'SHGetPathFromIDListW' : cannot convert parameter 2 from 'const wchar_t *' to 'LPWSTR'
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?什么是正确的C++方式来做到这一点?

谢谢!

c++ api wstring c2664

3
推荐指数
1
解决办法
3719
查看次数

无法使用wistringstream实例化istring_iterator

我正在尝试使用此线程中找到的方法拆分字符串,但我正在尝试将其调整为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;
}
Run Code Online (Sandbox Code Playgroud)

确切的错误消息是:

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&)'
Run Code Online (Sandbox Code Playgroud)

我认为它说它不能使用传递的实例化istream_iterator iss(这是一个w istringstream而不是istringstream).这是在使用XCode和GCC 4.2的Mac上.和AFAIK没有wistring_iterator或类似的东西.

当我使用非wstring版本时它完美地工作.正如您可能看到我已经更改了要使用的声明wstring,wistringstreams和vector<wstring>,只是将所有内容替换为使用宽版本.

什么可能导致这个,为什么它不接受wstring-version?

c++ istream-iterator wstring

3
推荐指数
1
解决办法
1647
查看次数

如何将wstring转换为LPOLESTR?

以下是我尝试过的,但没有用.

std::wstring = L"Text";
USES_CONVERSION;
LPOLESTR lpDesc = W2OLE((LPWSTR)wsDescr.c_str());
Run Code Online (Sandbox Code Playgroud)

请任何一个人说什么是更好的方法?

wstring

3
推荐指数
1
解决办法
7435
查看次数

在std :: wstring中查找方法

我已声明Wstring如下

wstring strID
Run Code Online (Sandbox Code Playgroud)

当我尝试按如下方式查找出现的子字符串时

int index =   strID.find("LABS");
Run Code Online (Sandbox Code Playgroud)

我收到如下错误

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> &'
Run Code Online (Sandbox Code Playgroud)

你能帮我找一下子串的出现吗?

c++ string wstring

3
推荐指数
1
解决办法
1万
查看次数

如何在不使用平台特定功能的情况下打印UTF-8字符串?

是否可以在不使用平台特定功能的情况下打印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;
}
Run Code Online (Sandbox Code Playgroud)

我收到此运行时错误:

在抛出'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

locale cout multiplatform utf-8 wstring

3
推荐指数
1
解决办法
3705
查看次数

查找 std::wstring 的长度

如何确定 a 中的长度(字符数)std::wstring

使用myStr.length()给出了字节大小(我认为),但不是字符数。我是否需要创建自己的函数来查找字符数,或者是否有本机 C++ 方式或本机 WinAPI 方式

c++ unicode winapi wstring

3
推荐指数
1
解决办法
8418
查看次数

Conver QString到BSTR,反之亦然

我想转换QStringBSTR反之亦然.

这是我尝试转换QStringBSTR:

std::wstring str_ = QString("some texts").toStdWString();
BSTR bstr_ = str_.c_str();
Run Code Online (Sandbox Code Playgroud)

并转换BSTRQString:

BSTR bstr_;
wchar_t *str_ = bstr_;
QString qstring_ = QString::fromWCharArray(str_);
Run Code Online (Sandbox Code Playgroud)

它是否正确?换句话说,是否有任何数据丢失?如果是,那么正确的解决方案是什么?

windows qt bstr wchar-t wstring

3
推荐指数
1
解决办法
3406
查看次数

C++ wstring构造函数

为什么这不能编译:

std::wstring timeString();
if (sysTime->wHour < 10) timeString.append(L"hi");
Run Code Online (Sandbox Code Playgroud)

但是,一旦我改变第一行是这样的:

std::wstring timeString(L"some text");
Run Code Online (Sandbox Code Playgroud)

有用?

c++ wstring

3
推荐指数
1
解决办法
3883
查看次数

如何正确使用MultiByteToWideChar

我正在使用MultiByteToWideChar将我的字符串转换为wstring.我首先尝试获得我的wstring所需的大小.根据文档传递0作为最后一个参数应该完成这个.使用MultiByteToWideChar(CP_UTF8, MB_COMPOSITE, str.c_str(), -1, nullptr, 0);返回0作为wstring缓冲区的所需大小.我已经验证str也是非空字符串.我在这做错了什么?

c++ windows msdn wstring multibyte-functions

3
推荐指数
1
解决办法
946
查看次数