读书人

把非常量wstring转换成非常量wchar_t*

发布时间: 2013-10-12 11:54:04 作者: rapoo

把非常量wstring转换成非常量wchar_t*时非常纠结的细节问题,网上找到的方法代码没用。
我尝试把一个wstring类型的字符串转换成wchar_t*类型的字符数组,而且是从非常量变成非常量。
因此,简单的


const wchar_t* wcTest = wsStr.c_str();

并不适合我

然后网上找到了另一个方法代码如下,非常蹊跷的是前天我还用这个代码成功把wstring的字符串转换到了wchar_t*里,而今天,同样的代码却始终只能把wstring字符串中第一个字符转给wchar_t*

wstring wsTest = L"test";
wchar_t* wcTarget = new wchar_t[wsTest.size()+1];
swprintf(wcTarget, wsTest.size()+1,L"%lS", wsTest.c_str());

根据这个例子,处理完之后wchar_t*类型的wcTarget只获得了wsTest的第一个字符(我仔细对比过之前可以成功的代码,而之前的代码现在也不行了,我现在没有头绪问题出在哪里)。

在看了C++ reference里关于swprintf的说明,我发现了能够成功转换的方法,就是把swprintf中的第3个实参改成L"%s"或L"%s"都可以,即变成如下代码;

wstring wsTest = L"test";
wchar_t* wcTarget = new wchar_t[wsTest.size()+1];
swprintf(wcTarget, wsTest.size()+1,L"%ls", wsTest.c_str());


尽管我已经达到了我的目的,但是这个写法似乎和网上多数能搜到的范例写法不同,更重要的是,之前那个代码我是成功把wstring整个字符串转换到wchar_t*里去的,所以很想知道这到底是什么问题。

分数不多了,抱歉只能少给点了。

[解决办法]
wstring wsTest = wstring(L"test");
wchar_t* wcTarget = new wchar_t[wsTest.size()+1];
swprintf(wcTarget, wsTest.size()+1,L"%lS", wsTest.c_str());
[解决办法]
L"%lS"
注意大小写s ,小写是正常的格式,大写是char * (MBCS) ,wchar_t *(UNICODE) 两种字符串的转换.

读书人网 >C++

热点推荐